正規表現メモリと後方参照

back
正規表現使用時のグルーピングで括弧()でかこった部分は、同時にメモリに保存され、
後で利用することができる。

if (/PAT1(PAT2)PAT3/) {
  $exp = $1
}

逆に、これらのメモリ変数が不要な場合は、メモリ格納がオーバーヘッドになるので、

(?:PATTERN)

とすることで、メモリ変数を使用せずにグルーピングが可能になる。

パターン内にメモリ変数を使用したい場合は、$1, $2 .. でなく、\1, \2 .. で、
メモリ内の変数を参照することができる。

$string =~ /(PATTERN1)PATTERN2\1/;

→ PATTERN1PATTERN2PATTERN1 という場合にマッチ

back