1

可能重复:
如何将带引号的字符串与其中的转义引号匹配?

我正在构建一个解析器,我需要一个匹配字符串的方法:字符串以". 直到 second 的所有"内容,即未被转义的,都应该匹配。转义意味着在它之前有奇数的反斜杠(例如\"or \\\")。

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

"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 中无法正常工作。

我花了很长时间试图修复这个正则表达式,但我不知道怎么做。我知道这个问题可能有点让人不知所措,所以如果您需要更多信息,请告诉我!

4

1 回答 1

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
于 2012-11-03T19:27:05.957 回答