我想知道的是如何修改下面的正則表達式:\".*?\"
所以它會忽略轉義「字符(\"
),所以它不會結束在\"
匹配正則表達式匹配引用字符串而忽視逃脫引號
對於例如:
parameter1 = " fsfsdfsd \" " parameter2 = " fsfsfs "
我想匹配:
" fsfsdfsd \" "
和
" fsfsfs "
但不
" fsfsdfsd \" " parameter2 = " fsfsfs "
等等
我想知道的是如何修改下面的正則表達式:\".*?\"
所以它會忽略轉義「字符(\"
),所以它不會結束在\"
匹配正則表達式匹配引用字符串而忽視逃脫引號
對於例如:
parameter1 = " fsfsdfsd \" " parameter2 = " fsfsfs "
我想匹配:
" fsfsdfsd \" "
和
" fsfsfs "
但不
" fsfsdfsd \" " parameter2 = " fsfsfs "
等等
+1 - 仍試圖理解它,但真的很好! –
非常感謝你,親切的主席先生。 –
您需要負回顧後您的正則表達式:
(?<!\\\\)\".*?(?<!\\\\)\"
我通常處理這類任務搞清楚什麼是元素可引號之間出現轉義字符。在這種情況下,每個元件可以是:
\
或"
任何字符;\"
;\
之後不是"
。如果需要的話,允許\\
代表\
,例如,或允許其他逃逸您還可以擴大這一點;修改上面的列表應該非常簡單。
然後正則表達式只是跟在列表中的規則:注:這是一個正則表達式,而不是一個Java字符串字面
"(([^\\"]|\\"|\\(?!"))*)"
這意味着,在引號內,我們匹配一個或更多的:(1)除\
或"
(角色等級)以外的字符; (2)序列\"
; (3)\
之後不是"
(負向預測)。當然,Java字符串文字看起來非常難看:
"\"(([^\\\\\"]|\\\\\"|\\\\(?!\"))*)\""
(注意:未經測試。)
行情之間的字符串匹配正確的正則表達式爲:
"([^\\"]+|\\.|\\\\)*"
但在Java斜線besause需要進行轉義,結果表達式爲:
Pattern.compile("\"(?:[^\\\\\"]+|\\\\.|\\\\\\\\)*\"");
這個表達式匹配slash-例如:
... "123 \\\" 456 \\" ... ^ ^slash literal ^ ^slash literal + escaped quote
正則表達式p寫在上面的評論將失敗在這個例子
所以,你的意思是捕獲兩個引號之間的一切? –
是的,但是很懶,所以它會匹配引號中最短的字符串。 – mrpyo
給我們一個字符串的例子,你期望從中得到什麼 – Colandus