正規表現

正規表現の細かい規則なんかは、逆引き Ruby やリファレンスのサイトを見るとして、自分で使ったもので、覚え書きしておきたいものををメモしていく。

後方参照

後方参照とは、正規表現中で () でくくった部分にマッチした文字列を参照することで、正規表現中で \1, \2, というように

半角のバックスラッシュ+数字の組み合わせ。数字は、何番目の括弧かを表す。これは、正規表現中と gsub での置換する文字列に使える。

だから、/(ab)\1/ だと /abab/ と同じになるはず。これは、括弧でくくった ab にマッチした文字列、つまり ab を \1 で参照している。

gsub を使って、次のような置換をすると、

"This is a test.".gsub(/t(\w+)[t|s]/i,'\1\1') => "hihi is a eses."

となる。ちなみに i は IGNORECASE、つまり、大文字小文字無視のオプション。

これを使うと RubyCocoa でアプリケーションで正規表現を使った置換ができるようになる。OgreKit でもいいんだけど、標準で使えないし、

RubyCocoa だと、Ruby の正規表現が使えるから、それで事足りるし。

これ以外に、正規表現でマッチさせた後にマッチした文字列だけじゃなくて、それに付随するいろいろな情報が得られる。

あと、$~ という MatchData オブジェクトを返すので、それからまたいろいろな情報が得られる。

$~.begin(n)

これで、マッチした部分の index が得られる。Ruby だから、そこまでのバイト数なんだと思うけど。

0はマッチした全体、1、2、3は括弧でかこった1番目、2番目、3番目の部分。これは、String#match でも String#scan でも使えるようだ。

$~.end(n)

begin が始まりなら、end は終わりの index。

$~.offset(n)

これを使うと、文字列の最初と最後の index が配列で返ってくる。

String#gsub(reg,string) は、ブロックで処理することもできて、複雑な置換ができる。

a.gsub(reg){|x|

処理

}

てな感じ。x には正規表現全体にマッチしたものが入り、$1、$2 など上に書いたような後方参照の値が得られる。それで、最後に返された値で置換が行われる。