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