可変長の後読みアサーションをサポートする Python/PHP/JavaScript の正規表現の実装はありますか?
/(?<!foo.*)bar/
同じ意味を持つが、後読みアサーションを使用しない正規表現を作成するにはどうすればよいですか?
このタイプのアサーションがいつか実装される可能性はありますか?
物事は私が思っていたよりもはるかに優れています。
アップデート:
(1) 可変長の後読みアサーションをサポートする正規表現の実装が既にあります。
Python モジュールregex (標準re
ではなく、追加のregex
モジュール) は、このようなアサーションをサポートしています (そして、他にも多くのクールな機能があります)。
>>> import regex
>>> m = regex.search('(?<!foo.*)bar', 'f00bar')
>>> print m.group()
bar
>>> m = regex.search('(?<!foo.*)bar', 'foobar')
>>> print m
None
Perl にはできず、Python にはできることが正規表現にあるということは、私にとって本当に大きな驚きでした。おそらく、Perl にも「強化された正規表現」の実装がありますか?
(おかげでMRABに+1)。
\K
(2)現代の正規表現にはクールな機能があります。
この記号は、置換を行う場合 (そして、私の見解では、アサーションの最も興味深い使用例は置換です)、以前に見つかったすべての文字を\K
変更してはならないことを意味します。
s/unchanged-part\Kchanged-part/new-part/x
これはほとんど後読みアサーションのようなものですが、もちろんそれほど柔軟ではありません。
についての詳細\K
:
私が理解している限り、同じ正規表現で \K を 2 回使用することはできません。そして、見つけたキャラクターをどの時点まで「殺す」かを言うことはできません. それは常に行頭までです。
(池上に感謝と+1)。
追加の質問:
- どの点が最終的な効果の点でなければならないかを言うことは可能
\K
ですか? - Perl/Ruby/JavaScript/PHP の強化された正規表現の実装についてはどうですか?
regex
Pythonのようなもの。