可能重复:
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无法正常工作。
我花了很长时间试图修复这个正则表达式,但我无法弄清楚如何。我知道这个问题可能有点压倒性,所以请告诉我你是否需要更多信息!
答案 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