Java 正则表达式匹配带引号的字符串,但忽略转义引号
我想知道的是如何修改以下正则表达式:Java 正则表达式匹配带引号的字符串,但忽略转义引号,java,regex,quotes,Java,Regex,Quotes,我想知道的是如何修改以下正则表达式:\“*?\”,这样它将忽略转义字符(\”),从而不会在\“处结束匹配 例如: parameter1 = " fsfsdfsd \" " parameter2 = " fsfsfs " ... "123 \\\" 456 \\" ... ^ ^ slash literal ^ ^ slash literal + escaped
\“*?\”
,这样它将忽略转义字符(\”
),从而不会在\“
处结束匹配
例如:
parameter1 = " fsfsdfsd \" " parameter2 = " fsfsfs "
... "123 \\\" 456 \\" ...
^ ^ slash literal
^
^ slash literal + escaped quote
我想匹配:
“fsd\”
及
“fsfs”
但不是
“fsd\”参数2=“fsfsfs”
等等。您需要在正则表达式中使用负查找:
(?<!\\\\)\".*?(?<!\\\\)\"
(?试试这个:
"(?:\\"|[^"])*"
但它与“test\”
匹配(使用lookback可能可以避免这种情况)。如果需要使用\
我通常通过计算引号之间可能出现的元素来处理这类任务。在这种情况下,每个元素可以是:
不是\
或“
的任何字符
两个字符的序列\”
后面不跟“
的\
如果需要,您可以通过允许\\
表示\
,或者允许其他转义来扩展它;修改上述列表应该非常简单
然后正则表达式只遵循列表中的规则:注意:这是一个正则表达式,而不是Java字符串文本
"(([^\\"]|\\"|\\(?!"))*)"
这意味着,在引号中,我们匹配一个或多个:(1)字符而不是\
或“
(字符类);(2)序列\”
;(3)\
后面没有”
(负向前看)。当然,Java字符串文字看起来很难看:
"\"(([^\\\\\"]|\\\\\"|\\\\(?!\"))*)\""
(注意:未测试。)引号之间匹配字符串的正确regexp为:
"([^\\"]+|\\.|\\\\)*"
"([^\\"]+|\\.|\\\\)*"
但由于java斜杠中需要转义,因此结果表达式为:
Pattern.compile("\"(?:[^\\\\\"]+|\\\\.|\\\\\\\\)*\"");
Pattern.compile(“\”(?:[^\\\\\\\\\\\\\\\\\\\\\\\\\\)+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\”);
此表达式匹配斜杠转义字符和斜杠本身,例如:
parameter1 = " fsfsdfsd \" " parameter2 = " fsfsfs "
... "123 \\\" 456 \\" ...
^ ^ slash literal
^
^ slash literal + escaped quote
... "123 \\\" 456 \\" ...
^^斜杠文字
^
^斜杠文字+转义引号
在上面的注释中编写的regexp在本例中会失败因此,您的意思是捕获两个引号之间的所有内容??是的,但会延迟,这样它将匹配引号中最短的字符串。请给我们一个字符串示例以及您希望从中获得的内容可能重复