【Ruby】正規表現を使った文字の置換
paizaで正規表現出てきたけど、忘れかけてる…
忘れないようにメモメモ。
文字の置換
sub
一致した最初の部分の文字列を置換したいときに使う。
書き方はこう。
str = "ヤサゴリ、おはよー" str.sub(/おはよー/, "こんばんはー") => "ヤサゴリ、こんばんはー" str = "ヤサゴリ、おはよーおはよー" str.sub(/おはよー/, "こんばんはー") => "ヤサゴリ、こんばんはーおはよー"
最初の部分だけしか置換されないので、連続で同じ言葉が出てきても変換されない。
gsub
一致した全部の文字列を置換したいときはこっち。
str = "ヤサゴリ、おはよーおはよー" str.gsub(/おはよー/, "こんばんはー") => "ヤサゴリ、こんばんはーこんばんはー"
2つあったおはよーが両方とも変換されている。
繰り返しの言葉
繰り返しで出てくる言葉を置換させたい場合、メタ文字を使うと便利。
メタ文字はこんなのがある。
メタ文字 | 意味 |
---|---|
✳︎ | 0回以上 |
+ | 1回以上 |
? | 0か1回 |
{n} | n回 |
. | 任意の文字 |
メタ文字を使って文字列を置換してみる。
str = "abc,aabbcc,aaabbbccc" str.gsub(/a+/, "z") => "zbc,zbbcc,zbbbccc"
'+'は「1回以上」の繰り返しだから、連続した'a'は全部'z'に置換される。
さらにこんな書き方をすると
str = "asdfjuwirehrikosdfc" str.gsub(/a.+c/, "z") => "z"
'.+'なので'a'から'c'の間にある任意の1回以上の文字はすべて含まれる。
そのため、最後の出力は'z'のみになる。