こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はStringモジュールについて学んだことをまとめます。
目次
1.Stringモジュールで遊んでみたシリーズ① -String.at ~ String.chunk の紹介
2.Stringモジュールで遊んでみたシリーズ② -String.codepoints ~ String.ends_with? の紹介
3.Stringモジュールで遊んでみたシリーズ③ -String.equivalent? ~ String.last の紹介
4.Stringモジュールで遊んでみたシリーズ④ -String.length ~ String.next_grapheme の紹介
5.Stringモジュールで遊んでみたシリーズ⑤ -String.next_grapheme_size ~ String.printable? の紹介
6.Stringモジュールで遊んでみたシリーズ⑥ -String.replace ~ String.replace_suffix の紹介
7.Stringモジュールで遊んでみたシリーズ⑦ -String.replace_trailing ~ String.split の紹介(本記事)
8.Stringモジュールで遊んでみたシリーズ⑧ -String.split_at ~ String.to_charlist の紹介
9.Stringモジュールで遊んでみたシリーズ⑨ -String.to_existing_atom ~ String.trim の紹介
10.Stringモジュールで遊んでみたシリーズ10 -String.trim_leading ~ String.valid? の紹介
目的
Stringモジュールに含まれる関数を触って機能を理解したい
実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0
String.replace_trailingとは
String.replace_trailing(string, match, replacement)
はstring
内の後方一致検索を行い、match
にヒットした部分をreplacement
に置き換えます。
例
String.replace_trailing("hello world", " world", "")
"hello"
後方一致検索なので末尾にヒットしなければ置換されません
String.replace_trailing("hello world thanks", " world", "")
"hello world thanks"
subject
の末尾からmatch
にヒットする要素が2回連続する場合全て置換されます
String.replace_trailing("hello world world", " world", "")
"hello"
文字列を置換するString関数のまとめ
文字列を置換するString関数の差分をまとめると下記の表の通りです
関数名 | 検索方法 | 連続ヒット時 |
---|---|---|
replace | 部分一致 | 全て置換 |
replace_leading | 前方一致 | 全て置換 |
replace_prefix | 前方一致 | 最初にヒットした部分のみ置換 |
replace_suffix | 後方一致 | 最初にヒットした部分のみ置換 |
replace_trailing | 後方一致 | 全て置換 |
1つ前の記事もご参照ください
String.reverseとは
String.reverse(string)
はstring
を逆順にして返します
例
String.reverse("abcd")
"dcba"
String.reverse("いろはにほへと ちりぬるを")
"をるぬりち とへほにはろい"
String.sliceとは(slice/2)
String.slice(string, range)
はstring
からrange
ぶんの部分文字列を返します。
例
String.slice("elixir", 0..2)
"eli"
range
がstring
の末尾を超える場合。
string
の末尾までを取り出します
String.slice("elixir", 1..10)
"lixir"
range
が負の数の場合
string
の末尾からインデックスを数えます
String.slice("elixir", -4..-3)
"ix"
range
をstart..stop
としたとき
range
をstart..stop
としたとき、start > stop
の範囲の場合ではステップ数ごとに文字を取り出します。
ステップ数を//
で書かないとwarningが出ます
String.slice("いろはにほへと", 1..-2//1)
# インデックスが1(この場合"ろ")をstartとする
# インデックスが-1(この場合"へ")をendとする
# //1なのでステップ数が1。つまり1文字ごとに取り出す
"ろはにほへ"
ステップ数を変更した場合
String.slice("いろはにほへと", 1..-2//2)
# インデックスが1(この場合"ろ")をstartとする
# インデックスが-1(この場合"へ")をendとする
# //1なのでステップ数が2。つまり2文字ごとに取り出す
"ろにへ"
String.sliceとは(slice/3)
String.slice(string, start, length)
は書記素ベースでstart
からlength
ぶんの部分文字列を返します。
※書記素ベースではなくバイト数ベースで取り出したい場合はString.byte_slice
を使用のこと↓
例
String.slice("elixir", 1, 3)
"lix"
取り出す範囲がstring
の末尾を超える場合。
start
からstring
の末尾までを取り出します
String.slice("elixir", 1, 10)
"lixir"
start
が文字列の長さより大きい場合。
空の文字列を返します
String.slice("elixir", 10, 1)
""
start
が負の数の場合。
string
の末尾からインデックスを数えます
String.slice("elixir", -2, 1)
"i"
String.slice("elixir", -2, 3)
"ir"
start
が負の数かつ文字列の長さより大きい場合。
start = 0
の時と同様の扱いになります
String.slice("elixir", -10, 1)
"e"
String.splitとは(split/1)
下記をご参照ください
String.splitとは(split/3)
下記をご参照ください
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩