黑马程序员技术交流社区

标题: java习题 [打印本页]

作者: 凝聚    时间: 2013-9-28 10:45
标题: java习题
正则表达式中按照叠词切割字符串,可以将规则封装一个组,用()完成,使用自己的组可以通过   \n  来获取 中的\n是怎么回事,社能具体解释一下。

作者: hanfei2511    时间: 2013-9-28 12:38
我用一个简单的例子解释一下啊:
String str = "diddjojgnjijiiifeeeejdkkkkls";
String regex = "(.)\\1";//定义规则:.代表任意字符()把.形成一个组,\\1代表重用(.)这个1号组,在此例中就表示任意出现过两次的字符。         
String[] arr = str.split(regex);
结果是:
di
jojgnjij
if

jd

ls
如果将规则定义为:String regex = "(.)\\1+";则代表匹配任意出现过一次以上的字符(即重复使用(.)这个一号组一次以上),那么结果就是:
di
jojgnjij
f
jd
ls
所以,在java中,为了让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出现都有编号,在这里我只举了一个只分一个组的例子,也可以分多个组,如  ((())()) : 就有4组 , 编号是(1(2(3))(4)),也就是说判断组有多少个,就看多有多少个左括号, 而编码从左边开始 1,然后 2,然后 ....。而使用哪个组就用\n来获取,比如使用第二组的规则,那么就在整体的规则(分组)定义后面加上\\2,如果需要重复使用这个规则,可以用+或者用大括号等制定使用此规则的次数范围等等,您可以自己举例试一下。 其实我个人感觉的话,模式匹配perl的好用些。可能是平时文本处理用perl做的比较多,嘿嘿。希望对您有用。

作者: 凝聚    时间: 2013-9-28 21:20
谢谢,讲述的非常清楚





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2