我正在尝试构建一个匹配转义字符串的正则表达式,例如@"hello""world"
. 到目前为止,我有(忽略空格):
@(?=")" #at sign if followed by double quote then double quote
(?> #atomic
""
|
[^"]
)*
"
问题是无效的(因为它没有关闭)字符串@"""
匹配为@""
. 我认为当我使用原子分组又名非回溯子表达式时,(?>""|[^"])*
将匹配的最后两个双引号@"""
(因为左替代可以匹配两个双引号)然后导致整体匹配失败(因为最后一个"
正则表达式不是存在)但该组似乎不够贪婪(尽管具有贪婪的量词*
和原子分组)并且"
一旦注意到正则表达式失败,它仍然会回溯到正则表达式的第一个之后的点。一种解决方法是放在(?!")
正则表达式的末尾,但我想知道为什么它不适用于原子分组。