我想知道的是如何修改以下正则表达式:\".*?\"
因此它将忽略转义的“字符(\"
),因此它不会在\"
处结束匹配。” p>
例如:
parameter1 = " fsfsdfsd \" " parameter2 = " fsfsfs "
我想要匹配:
" fsfsdfsd \" "
和
" fsfsfs "
但不是
" fsfsdfsd \" " parameter2 = " fsfsfs "
等...
答案 0 :(得分:7)
答案 1 :(得分:3)
我通常通过弄清楚引号之间可能出现的元素来处理这类任务。在这种情况下,每个元素可以是:
\
或"
; \"
; \
后面没有"
。如果需要,您可以通过允许\\
代表\
或允许其他转义来扩展它;修改上面的列表应该很简单。
然后正则表达式遵循列表中的规则:注意:这是一个正则表达式而不是Java字符串文字
"(([^\\"]|\\"|\\(?!"))*)"
这意味着,在引号内,我们匹配以下一个或多个:(1)除\
或"
以外的字符(字符类); (2)序列\"
; (3)\
后面没有"
(负向前瞻)。当然,Java字符串文字看起来很丑陋:
"\"(([^\\\\\"]|\\\\\"|\\\\(?!\"))*)\""
(注意:未经测试。)
答案 2 :(得分:0)
你的正则表达式需要负面的背后隐藏:
(?<!\\\\)\".*?(?<!\\\\)\"
答案 3 :(得分:0)
正确的regexp匹配引号之间的字符串将是:
"([^\\"]+|\\.|\\\\)*"
但是因为java斜杠需要转义,结果表达式将是:
Pattern.compile("\"(?:[^\\\\\"]+|\\\\.|\\\\\\\\)*\"");
此表达式与斜杠转义字符匹配并斜线自由,例如:
... "123 \\\" 456 \\" ... ^ ^ slash literal ^ ^ slash literal + escaped quote上面评论中写的
regexp将在此示例中失败