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

时间:2013-07-19 20:32:17

标签: regex

我正在尝试解析apache日志,并且我遇到了referer正确语法的问题,因为它是"(双引号)中的一个字符串,也可能有{{1在里面。

当字符串中有\"时,

"([^"]*)"不起作用。

如何从第一个双引号开始,然后取出所有不是双引号的字符,除非它是\",在这种情况下我包括它,并继续?

4 个答案:

答案 0 :(得分:3)

你可以用这个:

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

它将匹配除双引号或斜线双引号对之外的任何字符的零个或多个,全部用双引号括起来。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

这个怎么样?在结束\

之前排除"的负面看法
"(.+?)(?<!\\)"

答案 3 :(得分:0)

这将匹配两个引号,其中包含任意数量的转义引号:

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

首先它寻找报价。接下来,它搜索以下零到无穷大:

  • 非引用字符
  • 以反斜杠开头的引号字符