如何编写一个正则表达式,以接受包含任意数量的任何字符的表达式,但不包括 '[
',除非 '[
' 前面有 '\
'?
示例:
this is text \\[ this also [$ this isn't any more
从上面的文本中,"
this is text \\[ this also
" 应该被接受,其他的不应该。我写了类似下面的内容:[.[^\\\\[]]*
希望排除 '[
',但不知道如何允许它包含 '\\[
' 和其他文本。
这将匹配所有不等于[
或等于\
前面的[
的字符:
([^\[]|(?<=\\)\[)+
^([^\[]|(?<=\\)\[)+$
([^\[]|\\\[)*
这个正则表达式接受一个由 ((除了[
)或(\[
)组成的序列。
一般来说,如果你想接受一个字符串,其中某些字符需要转义,例如abcd
,与之匹配的正则表达式是:
([^abcd]|\\[abcd])*
编辑:
这个正则表达式可以使用 Matcher.find
遍历所有在/不在 []
中的部分:
\[(?:[^\[]|\\\[)*\]|(?:\\\[|[^\[])+
当将其放入Java字符串时,请将所有反斜杠都加倍; 我为了易读性而省略了它们。
这将把字符串abc[ def \[ asd \] ]\[ dasd[ \] ]
拆分成abc
,[ def \[ asd \] ]
,\[ dasd
和[ \] ]
。
\\[
进行拆分吗?)。你能否更新你的答案,提供更多关于你想要实现的细节?这可能是一个 XY 问题。 - ebsddd
\\
并不是必需的,因为在给定的上下文中它是一个字符类,但我不熟悉Java正则表达式。 - woemler[^\\[]|(?<=\\\\)\\[)+
。 - Duncan Jones