我正在尝试在JAVA中创建一个匹配字符串的正则表达式:' test" abcd \" EF"测试' 让我们说我想知道引号之间是否有这个顺序的字符abcdef和它们之间的任何其他字符(但是因为我只对引号之间的子字符串感兴趣,所以之间的字符它们不能作为报价,除非报价被转义的情况除外) 有可能这样做吗?
我成功创建了这个正则表达式
("[^\"]*\"[^\"]*a[^\"]*b[^\"]*c[^\"]*d[^\"]*e[^\"]*f[^\"]*\"[^\"]*")
适用于任何情况,除了字符串中嵌入了转义引号的情况。
答案 0 :(得分:1)
你几乎就在那里......为报价添加案例,可以与
匹配\\\"
所以你的每个[^\"]*
个案例(除了第一个和最后一个,我猜)都应该成为
([^\"]|\\\")*
...但你还需要处理反斜杠(因为,例如,在
中)"foo\\"
最终报价是真实的" (未转义)引用,即使它之前有反斜杠。)所以实际上你需要[^\"]*
个案例成为:
([^\"\\]|\\.)*
或换句话说:匹配不是\
或"
的任何内容,或者\
后跟一个被忽略的字符。
NB这意味着,例如,在字符串"xxx\abcdef"
中,"\a"
将不会与"a"
匹配,但这可能是您想要的(因为"\a"
通常表示ASCII" BEL"控制字符。)