如何将字符串与可以转义的正则表达式匹配?

时间:2012-11-03 19:23:06

标签: regex

  

可能重复:
  How to match a quoted string with escaped quotes in it?

我正在构建一个解析器,我需要一个匹配字符串的方法:字符串以"开头和结尾。直到第二个"的所有内容都应该匹配。转义意味着它前面有一些奇怪的反斜杠(例如\"\\\")。

一些例子,=>之前的部分是输入,另一部分是方法应该提取的部分:

"Hello World" => "Hello World"
"Hello" World => "Hello"
"Hello \"World" => "Hello \" World"
"Hello \\" World => "Hello \\"

我想在大多数编程语言中,反斜杠需要被转义才能在字符串中产生实际的反斜杠。这意味着需要两个反斜杠才能在字符串中获得一个真正的反斜杠。以上示例忽略了这一点。

我想出了这个正则表达式(我正在使用Ruby):

/
  "
  (?:
    (?:\\{2})* # an even amount of backslashes
    \\ # followed by a single backslash: odd amount of backslashes
    "
    |
    [^"]
  )*
  "
/x

但是,它无法正常使用第三个示例字符串,或者任何字符串都有反斜杠来转义"。我注意到当我删除第三行中的*然后转义"时,但是它与例4无法正常工作。

我花了很长时间试图修复这个正则表达式,但我无法弄清楚如何。我知道这个问题可能有点压倒性,所以请告诉我你是否需要更多信息!

1 个答案:

答案 0 :(得分:1)

试试这个:

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

Rubular演示:http://rubular.com/r/Ql9RQ4pex6

快速分解:

"            # a quote
(            # start group 1
  \\[\\"]    #   an escaped quote or backslash
  |          #   OR
  [^\\"]     #   any char except a quote or backslash
)*           # end group 1 and repeat it zero or more times
"            # a quote