例如 A(B)C(D)(E)F 分割为 A, (B), C, (D)(E), F 共5个子串,要求复制代码即用
pattern = "(str1(STR1)str2(STR21)(STR22)str3)";
此时你的运行结果是
[s, t, r, S, T, R, s, t, r, S, T, R, S, T, R, s, t, r]
而我希望的是
str1, STR1, str2, ((STR21)(STR22), str3 5个元素
就是说只有(和)是特殊字符
根据你的新要求,
正则表达式为:[A-Za-z0-9]+|(\([A-Za-z0-9]+?\))+
完整的Java程序如下:
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AAA {
public static void main(String[] args) {
ArrayList al=new ArrayList();
String pattern="(str1(STR1)str2(STR21)(STR22)str3)";
String regex="[A-Za-z0-9]+|(\\([A-Za-z0-9]+?\\))+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(pattern);
while(m.find()){
al.add(m.group());
}
System.out.print(al.toString());
}
}
运行结果:
[str1, (STR1), str2, (STR21)(STR22), str3]
非常好,还差一点点
String regex="[A-Za-z0-9]+|(\\([A-Za-z0-9]+?\\))+";
这里只是包含A-Za-z0-9,我是支持希望除了(和)以外的任意字符
String pattern="(str1(STR1)str2(STR21)(STR22)str3)";
只是示例,比如str1可以为 %a^b&,只要不包含(和)的正则
给你个通用的正则表达式:[^\(\)]+|(\([^\(\)]+?\))+
完整的Java程序如下:
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AAA {
public static void main(String[] args) {
ArrayList al=new ArrayList();
String pattern="(%a^b&(STR1)str2(STR21)(STR22)str3)";
String regex="[^\\(\\)]+|(\\([^\\(\\)]+?\\))+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(pattern);
while(m.find()){
al.add(m.group());
}
System.out.print(al.toString());
}
}
运行结果:
[%a^b&, (STR1), str2, (STR21)(STR22), str3]