请教一个分割用的正则表达式.

zhl1015 2008-03-21 03:22:38

String txt = "aaa,bbb(20,3),ccc,ddd(ww,qq)"
String[] arr = txt.split(""); //这里写什么正则??

//最后想得到的结果是:
arr[0] = "aaa";
arr[1] = "bbb(20,3)";
arr[2] = "ccc";
arr[3] = "ddd(ww,qq)";


这个正则怎么写啊?试了半天没搞定,请大家帮忙~~
最好说明一下答案的意思,学习一下,谢谢了!
...全文
106 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
以 (? 开头的都是非捕获结构,即在匹配完成后不会在内存中保留,
而 () 这种形式的会在内存中保留下来,以备后用。

a(?=X),表示 a 的后面允许跟着字母 X,可以看成 a 字符后面的缝隙
a(?!X),表示 a 的后面不允许跟着字母 X
(?<=X)a,表示 a 的前面允许出现字母 X
(?<!X)a,表示 a 的前面不允许出现字母 X
zhl1015 2008-03-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 healer_kx 的回复:]
引用 15 楼 zhl1015 的回复:
先不结贴了,跟大家学点再说


你说什么? 你可别吓唬我们。
[/Quote]
HOHO~~开玩笑了~~

不过真的想听听这个正则的解释,

dracularking ,bao110908 你俩都会,麻烦讲讲吧~~
  • 打赏
  • 举报
回复
String regex = ",(?![^(]*\\))";


逗号左边的缝隙后面不允许出现,以闭括号结尾的非开括号的一些字符,就是括号中逗号所具有的特征。
  • 打赏
  • 举报
回复
to: dracularking

我错了,不好意思哈,开始把所有的条件都加上去了,也没有把它们擦掉再试试看了,呵呵。
healer_kx 2008-03-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhl1015 的回复:]
先不结贴了,跟大家学点再说
[/Quote]

你说什么? 你可别吓唬我们。
zhl1015 2008-03-21
  • 打赏
  • 举报
回复
先不结贴了,跟大家学点再说
dracularking 2008-03-21
  • 打赏
  • 举报
回复
一开始做不来 一看火龙果的才恍然
但貌似这样就满足了
String regex = ",(?![^(]*\\))";

不知道后面的非捕获有何深意
zhl1015 2008-03-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 healer_kx 的回复:]
String txt = "aaa,bbb(20,ddd(1, 2)),ccc,ddd(ww,qq)"

楼主,这种你想分割嘛?
[/Quote]

这种不分解,不用嵌套的,有好方法吗,最好还能解释一下,学习学习~




感谢6楼bao110908 ,能不能解释一下啊 String regex = ",(?![^(]*\\)\\s*(?:,|$))"; ?????
logi22 2008-03-21
  • 打赏
  • 举报
回复
每次看火龙果的正则都有头昏眼花的感觉
看完就想自己是要好好学正则了。。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 healer_kx 的回复:]
String txt = "aaa,bbb(20,ddd(1, 2)),ccc,ddd(ww,qq)"

楼主,这种你想分割嘛?
[/Quote]

这种就很难做了,Perl 和 .Net 中支持递归结构的正则表达式,在 Java
中做不到,要实现的话得动态生成正则表达式,这是相当麻烦的。

如果存在这种情况的话,还是采用甘草的方法用栈吧。
healer_kx 2008-03-21
  • 打赏
  • 举报
回复
你到网上搜RTF解析器,可能就能找到我写的。
btb368 2008-03-21
  • 打赏
  • 举报
回复
楼上的讲讲用栈如何来搞啊?
healer_kx 2008-03-21
  • 打赏
  • 举报
回复
这种东西我向来手写,你这个搞个栈就搞定了,RTF都被我搞定了。
healer_kx 2008-03-21
  • 打赏
  • 举报
回复
String txt = "aaa,bbb(20,ddd(1, 2)),ccc,ddd(ww,qq)"

楼主,这种你想分割嘛?
  • 打赏
  • 举报
回复
耶,搞定了。

public class Test{

public static void main(String args[]) {
String str = "aaa,bbb(20,333,333),ccc,ddd(ww,qq,333,555),ee(aaa,33),ff";
String regex = ",(?![^(]*\\)\\s*(?:,|$))";
String[] strs = str.split(regex);
for(String s : strs) {
System.out.println(s);
}
}
}
hoszone 2008-03-21
  • 打赏
  • 举报
回复
没有想到方法,txt.split()是把字符串按照某个字符或串进行分割
  • 打赏
  • 举报
回复
(20,3) 是这样的话(其中只有两个)我可以做到,但是 (20,3,3) 其中有三个就比较讨厌了。
zhl1015 2008-03-21
  • 打赏
  • 举报
回复
不能实现括号里的逗号不分割吗???
zhl1015 2008-03-21
  • 打赏
  • 举报
回复
不要啊,程序就差这么一点了,不会吧
healer_kx 2008-03-21
  • 打赏
  • 举报
回复
严格讲,可能实现不了,正则不处理带有递归性质的文本。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧