/^"((?:[^"]|\\.)*)"/
反对这个字符串:
"quote\_with\\escaped\"characters" more
它只匹配\"
,但我已明确将\
定义为转义字符(并且它匹配\_
和\\
很好......)。
答案 0 :(得分:4)
如果你翻转两个选择的顺序,它可以正常工作:
/^"((?:\\.|[^"])*)"/
问题是否则重要的\
字符会在尝试匹配\"
之前被吃掉。它之前适用于\\
和\_
,因为任何一对中的两个字符都与[^"]
匹配。
答案 1 :(得分:0)
将Python与原始字符串文字一起使用以确保不会对转义序列进行进一步解释,以下变体确实有效:
import re
x = re.compile(r'^"((?:[^"\\]|\\.)*)"')
s = r'"quote\_with\\escaped\"characters" more"'
mo = x.match(s)
print mo.group()
发出"quote\_with\\escaped\"characters"
;我相信在您的版本中(如果在此处替换也会早期中断匹配)“not a doublequote”子表达式([^"]
)正在吞咽您打算将其视为转义后续字符的反斜杠。我在这里所做的就是确保不会以这种方式吞下这样的反斜杠,正如我所说,这似乎与这种变化有关。
答案 2 :(得分:0)
不打算混淆,只是我玩过的另一个信息。在regexp(PCRE)下面尝试不匹配错误的语法(例如,以\“结尾)并且可以同时使用'或'
/('|").*\\\1.*?[^\\]\1/
与php一起使用
<?php if (preg_match('/(\'|").*\\\\\1.*?[^\\\\]\1/', $subject)) return true; ?>
有关:
"quote\_with\\escaped\"characters" "aaa"
'just \'another\' quote "example\"'
"Wrong syntax \"
"No escapes, no match here"
这只匹配:
"quote\_with\\escaped\"characters" and
'just \'another\' quote "example\"'