我正在尝试编写一个匹配字符串的正则表达式。为简单起见,我现在只关注双引号(“)字符串。
到目前为止,我有这个:"\"[^\"]*\""
这适用于大多数字符串,但在存在转义双引号时失败,如下所示:
"a string \" with an escaped quote"
在这种情况下,它只匹配转义的报价。
我已经尝试了几件事来允许逃脱报价,但到目前为止我一直没有成功,有人能帮我一把吗?
答案 0 :(得分:2)
我自己设法解决了这个问题:
"\"(\\.|[^\"\\])*\""
答案 1 :(得分:1)
试试这个:
"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"
如果您想要多行转义字符串,可以使用:
"[^"\\]*(?:\\.[^"\\]*)*"
答案 2 :(得分:0)
答案 3 :(得分:0)
答案 4 :(得分:0)
通常你想接受任何逃脱。
" [^"\\]* (?: \\. [^"\\]* )* "
将是最快的。
"[^"\\]*(?:\\.[^"\\]*)*"
已压缩。
答案 5 :(得分:0)
POSIX没有,AFAIK,支持环视 - 没有它,实际上没有办法只使用正则表达式。但是,根据我拥有的POSIX模拟器(无法访问本机环境或库),在某些情况下,这可能会让您关闭:
"[^\"]*"|"[^\]*\\|\\[^\"]*[\"]
它将使用此源字符串捕获转义引用之前的部分和转义后的部分...(忽略换行符,想象它全部在一个字符串中):
I want to match "this text" and "This text, where there is an escaped
slash (\\), and an \"escaped quote\" (\")", but I also want to handle\\ escaped
back-slashes, as in "this text, with a \\ backslash: \\" -- with a little
text behind it!
它将捕获这些组:
"this text" -- simple, quoted string
"This text, where there is an escaped slash (\ -- part 1 of quoted string
\), and an \ -- part 2
"escaped quote\ -- part 3
" (\ -- part 4
")" -- part 5, and ends with a quote
\\ -- not part of a quoted string
"this text, with a \ -- part 1 of quoted string
\ backslash: \ -- part 2
\" -- part 3, and ends with a quote
通过进一步分析,您可以酌情将它们组合在一起:
"
开头和结尾,那么它就可以了"
开头,并以\
结尾,则需要 IMMEDIATELY ,然后是另一个以引号字符结尾的匹配组本身,或递归继续立即跟随另一个匹配组我认为这是你需要的所有分析 - 但一定要测试它!
让我知道这个想法是否有帮助!
修改强> 附加说明:为了清楚起见,为了使其工作,如果不将它们用作分隔符,则必须对整个源字符串中的所有引号进行转义,并且反斜杠必须在任何地方进行转义