Nextbeat Tech Bar: 楽しい正規表現
「非正規」な拡張機能に注意
最近の正規表現エンジン(PCRE, Ruby, Python, Java, JavaScript, .NETなど)は、本来の正規表現の能力を超える強力な拡張機能を備えています。
- 後方参照:
(\w+)\s+\1
-> hello hello
にマッチ
- 再帰:
\(([^()]*|(?R))*\)
-> 入れ子になったカッコにマッチ (エンジンによる)
非常に便利ですが「もはや"正規"表現ではない」ということを知っておくと、挙動に悩んだときの助けになります。
ちなみに:
- 先読みは正規の範疇に入ります
- 非自明だけど、21世紀に証明 by 森畑先生
- PPL 2011推薦論文で提案
- 後読みも直感的には正規ぽいけど、こっちはあまり調べてない