Regex()は、source文字列内でpatternを検索し、文字列を戻します。文字列内にあるパターンを識別したり、文字列を別の文字列に変換することができます。
Regex(source, pattern, (<replacement string>, <GLOBALREPLACE>), <format>, <IGNORECASE>);
IGNORECASEは、大文字と小文字の違いを無視します。GLOBALREPLACEは、文字列全体が処理されるまでマッチを繰り返します。formatは、マッチしたグループへの後方参照です。マッチしない場合、Regex()は欠測値を戻します。
bus|carは正規表現です(文字列であるため、引用符で囲みます)。この式は、「bus(バス)」か「car(自動車)」を検索することを意味しています。
sentence = "I took the bus to work.";
vehicle = Regex( sentence, "bus|car" );
"bus"
Regex()のオプションである第3引数では、結果の文字列を指定します。デフォルト値の\0は、正規表現によってマッチされたものすべてに対する後方参照です。前の例では、「bus」という単語がsentence内でマッチします。第3引数のデフォルト値である\0は文章全体を「bus」に置き換えます。
今度は、括弧を使って後方参照を増やしてみましょう。
sentence = "I took the bus to work.";
Regex( sentence, "(.*) bus (.*)", "\1 car \2" );
"I took the car to work."
busの前後にある(.*)は正規表現の一部です。括弧によって、キャプチャするグループが作成されます。「.」には任意の文字がマッチします。「*」には、0個以上の前の表現がマッチします。結果として、1組目の括弧にはbusの前にあるものがマッチし、2組目の括弧にはbusの後ろにあるものがマッチします。第3引数の\1 car \2は、テキストを組み立て直し、busの代わりにcarを挿入します。
後方参照とキャプチャするグループを参照してください。
GLOBALREPLACEは、Regex()の動作を変更します。マッチが成功すると、ソース文字列全体が、パターンのマッチした箇所を置換した形で戻されます。マッチがない場合は、ソース文字列が変更なしで戻されます。
sentence = "I took the red bus followed by the blue bus to get to work today.";
Regex( sentence, "bus", "car", GLOBALREPLACE);
"I took the red car followed by the blue car to get to work today."
後方参照を使用することもできます。この例では、最初に別の文を使います。
sentence = "I took the red bus followed by the blue car to get to work today.";
Regex(
sentence,
"(\w*) (bus|car)",
"bicycle (not \2) that was \1",
GLOBALREPLACE
);
"I took the bicycle (not bus) that was red followed by the bicycle (not car) that was blue to get to work today."
\w*は、0個以上の文字をマッチし、括弧で囲まれているため第1の後方参照となります。同じく括弧で囲まれているbus|carが、第2の後方参照になります。第3引数のbicycle (not \2) that was \1は、ソーステキストの中でマッチした部分をどのように置き換えるかを記述しています。
これで後方参照を使ってデータの位置を入れ替える方法がわかりました。この方法は、たとえば姓と名の位置を入れ替えたいときに便利です。