我写了这个正则表达式来匹配字符串:
(?>(?<Quote>""|').*?(?<!\\)\k<Quote>)
即,一些用引号括起来的文本。它还支持转义,因此它将"hello\"world"
完全匹配,而不会像我想要的那样在第一个引号处停止。但是我忘记了双重转义。"hello\\"world"
例如,无效。
我很确定这可以通过平衡组来解决,但我以前从未真正使用过它们。有谁知道这个怎么写?
我写了这个正则表达式来匹配字符串:
(?>(?<Quote>""|').*?(?<!\\)\k<Quote>)
即,一些用引号括起来的文本。它还支持转义,因此它将"hello\"world"
完全匹配,而不会像我想要的那样在第一个引号处停止。但是我忘记了双重转义。"hello\\"world"
例如,无效。
我很确定这可以通过平衡组来解决,但我以前从未真正使用过它们。有谁知道这个怎么写?
正则表达式不适用于转义结构。
我认为不可能以任何“好”的方式(如果有的话)来做到这一点,尽管如果我另有想法,我会发布一个编辑。
平衡组定义用于嵌套结构。嵌套不会发生在字符串中,因此平衡组定义似乎甚至不是解决此问题的正确工具。
这取决于您正在寻找多少功能。如果你只是想匹配下一个转义的引号,你可以使用模式
^"([^\\\"]|\\.)*"
其中,当转义代码时,结果就像
"^\"([^\\\\\\\"]|\\\\.)*\""
匹配类似的东西
"Hello! \" Hi! \" "
但是一旦你开始添加更复杂的需求,比如 Unicode 转义,它就会变得更加乏味。自己动手吧,应该会简单很多。
如果您对平衡组定义的工作原理感到好奇,我建议您阅读本书的第 430 页(pdf 中的 34 页)。