9

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

例子:

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

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

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

排除 ' [' 但不知道如何允许它包含 ' \\[' 以及其他文本。

4

2 回答 2

5

这将匹配所有不等于[或不等于 a 的[字符\

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

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

^([^\[]|(?<=\\)\[)+$
于 2013-03-22T15:14:43.923 回答
4
([^\[]|\\\[)*

这接受一个序列((除[)或(\[))。

一般来说,如果你想接受一个字符串,其中某些字符需要转义,例如abcd,匹配它的正则表达式是:

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

编辑:

此正则表达式可用于Matcher.find迭代内部/外部的所有部分[]

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

(将其放入 Java 字符串时,将所有反斜杠加倍;为了便于阅读,我将它们排除在外。)

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

于 2013-03-22T15:14:01.277 回答