求正则表达式分割字符串的思路
一个字符串:str = "(1) P ((2)@!)";
期望分割成一个数组array
arr[0] = (1)
arr[1] = P
arr[2] = (2)
arr[3] = @!
请问应该如何处理?
补充 (1)是一个整体,里面可以是(3)甚至(50)等等
在线等 谢谢
------解决方案--------------------这个就不能用正则了吧 要用栈
扫描字符串
遇到字母压栈 遇到(压栈
遇到)弹栈 看是不是( 如果不是接着弹 直到找到(
然后看栈顶是不是( 不是就弹 直到遇到(
大致思路就是这样
------解决方案--------------------用匹配的方式试试
public static void main(String[] args) {
String str = "(1) P ((2)@!)";
Pattern p = Pattern.compile("(\\(\\d+\\))\\s*(\\w+)\\s*\\((\\(\\d+\\))(.+)\\)");
Matcher m = p.matcher(str);
String[] arr = null;
if(m.find()) {
arr = new String[]{m.group(1),m.group(2),m.group(3),m.group(4) };
}
for(String s : arr) {
System.out.println(s);
}
}
------解决方案--------------------Pattern.compile("(\\(\\d+\\))\\s*(\\w+)\\s*\\((\\(\\d+\\))(.+)\\)");
上面的就可以 括号分组,一个个匹配。