/^"((?:[^"]|\\.)*)"/
在此字符串:如何將帶引號的字符串與轉義引號匹配?
"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