Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式匹配带引号的字符串,但忽略转义引号_Java_Regex_Quotes - Fatal编程技术网

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在本例中会失败

    因此,您的意思是捕获两个引号之间的所有内容??是的,但会延迟,这样它将匹配引号中最短的字符串。请给我们一个字符串示例以及您希望从中获得的内容可能重复