正则表达式排除[除非前面有\

时间:2013-03-22 15:07:36

标签: java regex

如何编写一个接受包含除“[”之外的任意数量字符的表达式的正则表达式,除非“[”前面带有“\”?

示例:

this is text \\[ this also [$ this isn't any more    

从上面的文字中,应该接受“this is text \\[ this also”,其余的不应该被接受。我写了类似的东西:

[.[^\\\\[]]*  

排除“[”,但不知道如何允许它包含“\\[”以及文本的其余部分。

2 个答案:

答案 0 :(得分:5)

这将匹配所有不等于[或等于[ \前面的([^\[]|(?<=\\)\[)+ 字符:

^([^\[]|(?<=\\)\[)+$

如果您想要对整个字符串进行简单的传递/失败,只需将开始/结束行字符添加到正则表达式:

{{1}}

答案 1 :(得分:4)

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

这接受一系列((除[之外的任何事物)或(\[))。

通常,如果您想接受某些字符需要转义的字符串,例如abcd,匹配它的正则表达式是:

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

修改

此正则表达式可与Matcher.find一起使用,以迭代[]内/外的所有部分:

\[(?:[^\[]|\\\[)*\]|(?:\\\[|[^\[])+

(将所有反斜杠放在Java字符串中时加倍;我将它们遗漏以便易读。)

这会将字符串abc[ def \[ asd \] ]\[ dasd[ \] ]拆分为abc[ def \[ asd \] ]\[ dasd[ \] ]