のようなエスケープされた文字列に一致する正規表現を構築しようとしています@"hello""world"
。これまでのところ私は持っています(空白を無視してください):
@(?=")" #at sign if followed by double quote then double quote
(?> #atomic
""
|
[^"]
)*
"
問題は、無効な (閉じられていないため) 文字列が@"""
として一致すること@""
です。アトミック グループ化、別名非バックトラッキング部分式を使用(?>""|[^"])*
すると、最後の 2 つの二重引用符に一致し@"""
(左の代替が 2 つの二重引用符に一致する可能性があるため)、必要に応じて全体的な一致が失敗する ("
正規表現の最後の部分が一致しないため) と考えました。存在します) しかし、グループは十分に貪欲ではないように見えます (貪欲な量指定子と原子グループ化がありますが)正規表現が失敗したことに気付くとすぐに、正規表現の*
最初の後にポイントに戻ります. "
回避策は正規表現の最後に置くことです(?!")
が、アトミックグループ化で機能しない理由を知りたいです。