正则表达式,匹配未在JAVA中转义的引号

时间:2014-11-19 21:39:40

标签: java regex

我正在尝试在JAVA中创建一个匹配字符串的正则表达式:' test" abcd \" EF"测试' 让我们说我想知道引号之间是否有这个顺序的字符abcdef和它们之间的任何其他字符(但是因为我只对引号之间的子字符串感兴趣,所以之间的字符它们不能作为报价,除非报价被转义的情况除外) 有可能这样做吗?

我成功创建了这个正则表达式

("[^\"]*\"[^\"]*a[^\"]*b[^\"]*c[^\"]*d[^\"]*e[^\"]*f[^\"]*\"[^\"]*")

适用于任何情况,除了字符串中嵌入了转义引号的情况。

1 个答案:

答案 0 :(得分:1)

你几乎就在那里......为报价添加案例,可以与

匹配
\\\"

所以你的每个[^\"]*个案例(除了第一个和最后一个,我猜)都应该成为

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

...但你还需要处理反斜杠(因为,例如,在

中)
"foo\\"

最终报价是真实的" (未转义)引用,即使它之前有反斜杠。)所以实际上你需要[^\"]*个案例成为:

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

或换句话说:匹配不是\"的任何内容,或者\后跟一个被忽略的字符。

NB这意味着,例如,在字符串"xxx\abcdef"中,"\a"将不会与"a"匹配,但这可能是您想要的(因为"\a"通常表示ASCII" BEL"控制字符。)