Java 正则表达式以避免在特殊字符上拆分

Java 正则表达式以避免在特殊字符上拆分,java,regex,Java,Regex,我需要在和,或,NOT,&,|,!,等关键字上拆分字符串,!,(,)。 有一个特殊的条件,如果任何一个括号 >(''或')'/COD>出现在单词或括号中间,有特殊字符出现在单词的中间。我既不想在任何特殊字符上分裂,也不想在空格上分裂。 如果括号出现在单词的开头或结尾,那么只有我需要拆分 例如: 我的逻辑如下 String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) "; str = str.replaceAll("\\s*\\(\\s*

我需要在
和,或,NOT,&,|,!,等关键字上拆分字符串,!,(,)。

有一个特殊的条件,如果任何一个括号<代码> >(''或')'/COD>出现在单词或括号中间,有特殊字符出现在单词的中间。我既不想在任何特殊字符上分裂,也不想在空格上分裂。

如果括号出现在单词的开头或结尾,那么只有我需要拆分

例如:

我的逻辑如下

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";

str = str.replaceAll("\\s*\\(\\s*", "(");

str = str.replaceAll("\\s*\\)\\s*", ")");

str = str.replaceAll("and\\(", " and (");

str = str.replaceAll("\\)and", ") and ");

String[] splitArray= str.toUpperCase().split(("((?<=\\bOR\\b|\\bAND\\b|\\bNOT\\b)|(?=\\bOR\\b|\\bAND\\b|\\bNOT\\b))|((?<=(^| )\\(+)+\\b+)|(\\b(?=\\)($| )))"));
但我希望输出为:

(((

TOM

AND

JERRAY

**)**

AND

MIC(#*EY

AND,

MINEY

**))**

我写的代码并没有拆分闭括号。我也想拆分它。有人能帮我吗?

编辑:修改了模式,将其拆分为
,而不是空格

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";

String[] splitArray= str.toUpperCase().split(("AND|OR|(\\()+\\(|\\)(\\s|\\))+|\\)^(.)|^(.)\\("));
你在找这个吗

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";
String[] splitArray= str.toUpperCase().split("(?i)(?<=\\()()(?=\\w)|(?<=\\w+)()(?=\\))|()(?=and)|(?<=and)()");
String str=“((汤姆和杰瑞)和麦克(#*ey和米尼))”;

String[]splitArray=str.toUpperCase().split((?i)(?编辑:修改了模式,将其拆分为
,而不是空格

你在找这个吗

String str = "(((Tom AND Jerray) AND Mic(#*ey and miney)) ";
String[] splitArray= str.toUpperCase().split("(?i)(?<=\\()()(?=\\w)|(?<=\\w+)()(?=\\))|()(?=and)|(?<=and)()");
String str=“((汤姆和杰瑞)和麦克(#*ey和米尼))”;

String[]splitArray=str.toUpperCase().split((?i)(?但是这个正则表达式没有保留拆分器。有什么方法可以保留它吗?但是这个正则表达式没有保留拆分器。有什么方法可以保留它吗?上面的正则表达式也在空间上被拆分。我不想在空间上拆分它。你能避免在空间上拆分它吗?这与你在帖子中想要的输出相冲突。如果你不这样做的话如果要在空间上拆分,帖子中的输出不正确。它将是:
((
汤姆和杰瑞
)和麦克(#*EY和米尼
,和
。嗨,谢谢你的及时回复。但是如果你正确地阅读了我的问题,在第一行我提到了拆分的要求,在几行之后我也提到了我不想拆分空间。对不起,我误解了这个问题。我刚刚编辑了模式。希望它对你有用。上面的正则表达式正在拆分ted也在空间上。我不想在空间上拆分。你能避免在空间上拆分吗?这与你在帖子中想要的输出相冲突。如果你不想在空间上拆分,帖子中的输出是不对的。它将是:
(((
汤姆和杰瑞
)和麦克风(#*EY和MINEY
,和
。嗨,谢谢你的及时回复。但是如果你正确阅读了我的问题,在第一行我提到了拆分的要求,在几行之后我也提到了我不想在空间上拆分。对不起,我误解了这个问题。我刚刚编辑了模式。希望它对你有用。