假设我有一个字符串,我想从开头的双引号解析到结尾的双引号:
asdf"pass\"word"asdf
我很幸运地发现以下PCRE可以匹配从开头的双引号到结束的双引号,同时忽略中间的转义双引号(以正确解析逻辑单元):
".*?(?:(?!\\").)"
匹配:
"pass\"word"
然而,我不知道为什么这个PCRE可以正确匹配开头和结尾的双引号。
我了解以下内容:
" = 双引号字面值
.*? = 懒惰匹配零个或多个任意字符
(?: = 开始非捕获组
(?! ") = 断言无法匹配字面上的\"
. = 单个字符
) = 结束非捕获组
" = 双引号字面值
看起来一个单独的字符和负向先行断言是同一个逻辑组的一部分。对我来说,这意味着PCRE的意思是“从双引号开始匹配零个或多个任意字符,只要在字符后面没有 \",然后匹配一个以上的字符和一个单引号。”
但是,按照这种逻辑,PCRE根本不会匹配该字符串。
有人能帮我理解吗?
r
匹配?负向先行断言不应该阻止它通过字符串中的\"
吗?顺便感谢帮我理解。 - Nolanbash
不使用Perl风格的正则表达式,只使用POSIX定义的扩展正则表达式。 - chepner