/^"((?:[^"]|\\.)*)"/
在此字符串:如何将带引号的字符串与转义引号匹配?
"quote\_with\\escaped\"characters" more
它只匹配,直到\"
,虽然我已经明确规定\
作为转义字符(和它匹配\_
和\\
精...)。
/^"((?:[^"]|\\.)*)"/
在此字符串:如何将带引号的字符串与转义引号匹配?
"quote\_with\\escaped\"characters" more
它只匹配,直到\"
,虽然我已经明确规定\
作为转义字符(和它匹配\_
和\\
精...)。
如果你翻车了你的两个备选方案的顺序是否能够正常工作:
/^"((?:\\.|[^"])*)"/
的问题是,否则,重要的\
字符被吃掉它试图匹配\"
之前。它之前只适用于\\
和\_
,因为两个字符都与您的[^"]
匹配。
简单的错误与事物的顺序,辉煌。谢谢! – 2009-08-30 00:41:07
使用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"
;我相信在你的版本中(如果在这里取代它,也会早早打断这场比赛),“不是双引号”的子表达式([^"]
)正在吞噬你打算被视为逃避紧随其后的角色的反斜杠。我在这里所做的只是确保这样的反斜杠不会被这种方式吞噬,正如我所说的那样,它似乎适用于这种变化。
不打算混淆,只是我玩过的另一个信息。下面的正则表达式(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\"'
难道还有比“什么是WRO更糟糕的问题与正则表达式?“ - 没有罪CX。 – Rob 2009-08-30 00:14:21
我知道,对不对:D 你有什么标题? – 2009-08-30 00:20:07
@Rob:这个问题的表述应该不同吗?或者,有关正则表达式的问题不像预期的那样不适合堆栈溢出? – 2009-08-30 00:20:55