Perl 5.9.5 で拡張された正規表現の概要 および、その Oniguruma との比較 2007/07/14 K.Takata 参考 URL http://fleur.hio.jp/perldoc/perl/5.9.5/pod/perl595delta.mix.html http://fleur.hio.jp/perldoc/perl/5.9.5/pod/perlre.mix.html http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt ------------------------------------------------------------------------ 3. 文字種 \v Vertical whitespace ※ [\x0A-\x0D\x{85}\x{2028}\x{2029}] と同等? \V Not vertical whitespace \h Horizontal whitespace \H Not horizontal whitespace \R Linebreak (?>\x0D\x0A?|[\x0A-\x0C\x{85}\x{2028}\x{2029}]) と同等。 文字集合の中では使えない。代わりに \v を使う。 ※ \v, \h, \H は Oniguruma と互換性なし。 Oniguruma の \v は、\x0B なので、Perl 5.9.5 の \v には含まれる。 4. 量指定子 強欲な量指定子が追加。 *+, ++, ?+, {n}+, {n,}+, {n,m}+ 7. 拡張式集合 (?pimsx-imsx) 孤立オプション (?p) が追加されている。/p 修飾子と同じ。 マッチ結果を ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH} に保存する。 (?|pattern) "branch reset" pattern | による分岐ごとに、後方参照の番号をリセットする。 (?'NAME'pattern), (?pattern) 名前付き捕獲式集合 ※ Oniguruma と同等。 マッチ結果を正規表現の外で参照するには、特殊ハッシュ %+, %- を使う。 例: s/(?.)\k/$+{letter}/g 同じ名前で多重定義されている場合は、%+ には、最も左の捕獲値が入る。 一方、%- には同じ名前の全てのキャプチャバッファの値を保持する配列 へのリファレンスが入る。 ※ $-{letter}[0] のようにして参照する。 \K keep pattern \K より前をマッチ結果 $& に含めない。 戻り読み (?<=pattern) の別表記。ただし可変長が使える。 8. 後方参照 \gN, \g{N} 番号指定による後方参照。(N は整数) (※ 0 以外?) ※ \g{N} の直後に数字が続く場合でも、安全に参照できる。 負の値を指定した場合は、相対番号指定による後方参照。 \g{name} 名前指定による後方参照 \k 名前指定による後方参照 ※ Oniguruma とほぼ同じ。 \k'name' 名前指定による後方参照 ※ Oniguruma とほぼ同じ。 ※ Oniguruma では、名前が多重定義されている場合は、番号の大きい式集合から 優先的に参照されるが、Perl 5.9.5 では最も左のグループが参照される。 ※ Oniguruma では、\g, \g'name' は部分式呼び出しであり、 後方参照ではない。 9. 部分式呼出し (?PARNO), (?-PARNO), (?+PARNO), (?R), (?0) 番号指定による部分式呼出し (PARNO >= 1) ※ (?PARNO) は、Oniguruma の \g, \g'PARNO' と同等。 (?&NAME) 名前指定による部分式呼出し ※ Oniguruma の \g, \g'NAME' と同等。 (名前が多重定義されていた場合は不明) 11. その他 ・Special Backtracking Control Verbs 実験的なものであり変更される可能性あり。 (*VERB:ARG) の形式で記述する。 VERB: THEN, PRUNE, MARK, SKIP, COMMIT, FAIL, ACCEPT 12. Oniguruma には同等のものが存在しない機能 + \v, \V, \h, \H, \R (非)垂直空白文字、(非)水平空白文字、改行 ※ Oniguruma では \v, \h, \H は別の意味を持っている。 + (?p) ※ Oniguruma には必要無いが、エラーにならないようにすべきか? + (?|pattern) + \K ※ 対応検討中らしい。 + \gN, \g{N} 安全な番号指定後方参照、および、相対番号による後方参照。 ※ Oniguruma では、\g, \g'N' は部分式呼び出し。 \k, \k'N' 辺りが適当か? + (?-PARNO), (?+PARNO), (?R), (?0) 相対番号指定による部分式呼び出し、パターン全体の再帰呼び出し。 + (*VERB:ARG)