Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Regex 什么正则表达式将匹配除“0”以外的所有字符;,除非是\";?_Regex - Fatal编程技术网

Regex 什么正则表达式将匹配除“0”以外的所有字符;,除非是\";?

Regex 什么正则表达式将匹配除“0”以外的所有字符;,除非是\";?,regex,Regex,我正在尝试解析apache日志,但我在引用程序的正确语法方面遇到了问题,因为它是“(双引号)中的一个字符串,也可能包含\” “([^”]*)”在字符串中有\“时不起作用 如何从第一个双引号开始,然后获取所有非双引号的字符,除非它是\“,在这种情况下,我将其包括在内,并继续使用?您可以使用以下方法: "((?:[^"]|\\")*)" 它将匹配除双引号或斜杠双引号对以外的零个或多个字符,所有字符都用双引号括起来。这将匹配两个引号,两个引号之间有任意数量的转义引号: "\([^"]\|\\"\)*

我正在尝试解析apache日志,但我在引用程序的正确语法方面遇到了问题,因为它是
(双引号)中的一个字符串,也可能包含
\”

“([^”]*)”
在字符串中有
\“
时不起作用

如何从第一个双引号开始,然后获取所有非双引号的字符,除非它是
\“
,在这种情况下,我将其包括在内,并继续使用?

您可以使用以下方法:

"((?:[^"]|\\")*)"

它将匹配除双引号或斜杠双引号对以外的零个或多个字符,所有字符都用双引号括起来。

这将匹配两个引号,两个引号之间有任意数量的转义引号:

"\([^"]\|\\"\)*"
首先,它查找一个引号。然后,它搜索以下内容的0到无穷大:

  • 非引号字符
  • 带反斜杠的引号字符

字符串中是否有其他转义,例如
“hello\\”
?在这种情况下,您需要一种更通用的方法:

"((?:\\.|[^"\\])*)"

这是怎么回事?在关闭


(.+?)(?但是,如果字符串中可能有其他转义序列,例如字符串以两个反斜杠结尾,这将导致问题。@TimPietzcker,这是一个很好的观点。我不确定是否需要这样做,但值得考虑。大多数regexp引擎更倾向于匹配较早的替代方案,而不是较晚的替代方案,即使较晚的替代方案会导致更长的时间。)整体匹配。因此,可能需要将替代序列切换到
\\“|[^”]
或将字符类更改为
[^“\\]
,以防止匹配在第一个
"
@p.s.w.g:不适用于POSIX BRE,这可能是OP用来解析Apache日志的方法。@TimPietzcker很公平。如果OP没有进一步说明,很难知道正确的模式应该是什么。当然这取决于您使用的正则表达式标准。我在sed上进行了测试。您使用的是哪个正则表达式引擎?等等!我刚刚签入<代码>python3的
re
模块。
“([^”]*)"
似乎工作正常。欢迎使用Stack Overflow。如果这些答案中的任何一个解决了您的问题,请接受您认为最能解决您面临的问题的答案。这是为了让将来可能有相同问题的其他人受益,也为了让本网站上的其他人知道您的问题已经解决。此外,once您已经获得了足够的声誉(15或更多),请投票选出任何对您有帮助或您认为写得非常好的答案,即使它不是您最终使用的解决方案。+1但我认为捕获组的存在是有原因的。我建议在引号中用
包装所有内容。
"(.+?)(?<!\\)"