正则表达式匹配可逃避的字符串?

时间:2011-05-11 02:45:32

标签: .net regex balancing-groups

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

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

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

我很确定这可以用balancing groups修复,但我以前从未真正使用它们。有谁知道怎么写这个?

1 个答案:

答案 0 :(得分:1)

正则表达式意味着用于转义构造。

我认为不可能以任何“好的”方式(如果有的话)这样做,虽然如果我弄清楚的话,我会发布一个编辑。

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


编辑1:

这取决于您要查找的功能数量。如果您只想匹配下一个转义的引用,则可以使用模式

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

,当代码转义时,就像

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

匹配类似

的内容
"Hello! \" Hi! \" "

但是一旦你开始添加更复杂的要求(如Unicode转义),它就会变得更加繁琐。 lot 。只需手动完成,它应该更简单。


编辑2:

如果您对平衡组定义的工作方式感到好奇,我建议您阅读this book的第430页(pdf格式的34)。