1

我写了这个正则表达式来匹配字符串:

(?>(?<Quote>""|').*?(?<!\\)\k<Quote>)

即,一些用引号括起来的文本。它还支持转义,因此它将"hello\"world"完全匹配,而不会像我想要的那样在第一个引号处停止。但是我忘记了双重转义。"hello\\"world"例如,无效。

我很确定这可以通过平衡组来解决,但我以前从未真正使用过它们。有谁知道这个怎么写?

4

1 回答 1

1

正则表达式不适用于转义结构。

我认为不可能以任何“好”的方式(如果有的话)来做到这一点,尽管如果我另有想法,我会发布一个编辑。

平衡组定义用于嵌套结构。嵌套不会发生在字符串中,因此平衡组定义似乎甚至不是解决此问题的正确工具。


编辑1:

这取决于您正在寻找多少功能。如果你只是想匹配下一个转义的引号,你可以使用模式

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

其中,当转义代码时,结果就像

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

匹配类似的东西

"Hello! \" Hi! \" "

但是一旦你开始添加更复杂的需求,比如 Unicode 转义,它就会变得更加乏味。自己动手吧,应该会简单很多。


编辑2:

如果您对平衡组定义的工作原理感到好奇,我建议您阅读本书的第 430 页(pdf 中的 34 页)。

于 2011-05-11T03:00:37.563 回答