我写了这个正则表达式来匹配字符串:
(?>(?<Quote>""|').*?(?<!\\)\k<Quote>)
即,一些用引号括起来的文字。它还支持转义,因此它将完全匹配"hello\"world"
,而不会像我想的那样停在第一个引号。但我忘记了双重逃避。例如,"hello\\"world"
无效。
我很确定这可以用balancing groups修复,但我以前从未真正使用它们。有谁知道怎么写这个?
答案 0 :(得分:1)
正则表达式不意味着用于转义构造。
我认为不可能以任何“好的”方式(如果有的话)这样做,虽然如果我弄清楚的话,我会发布一个编辑。
平衡组定义适用于嵌套构造。嵌套不会发生在字符串中,因此平衡组定义似乎甚至不是正确的工具。
这取决于您要查找的功能数量。如果您只想匹配下一个转义的引用,则可以使用模式
^"([^\\\"]|\\.)*"
,当代码转义时,就像
一样"^\"([^\\\\\\\"]|\\\\.)*\""
匹配类似
的内容"Hello! \" Hi! \" "
但是一旦你开始添加更复杂的要求(如Unicode转义),它就会变得更加繁琐。 lot 。只需手动完成,它应该更简单。
如果您对平衡组定义的工作方式感到好奇,我建议您阅读this book的第430页(pdf格式的34)。