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