黑马程序员技术交流社区

标题: 关于正则表达式,组的问题 [打印本页]

作者: 吴杰栋    时间: 2014-8-6 22:34
标题: 关于正则表达式,组的问题
  1.         public static void test1() {
  2.                 String str = "我我我我我....要要要要...睡睡睡睡....觉觉觉觉";
  3.                 String s1 = str.replaceAll("\\.+", "");
  4.                 System.out.println(s1);
  5.                 String s2 = s1.replaceAll("(.)\\1+", "$1");
  6.                 System.out.println(s2);
  7.         }
复制代码
第一个正则的意思是点必须出现一次或者多次,然后在用空字符串替换掉
第二个正则的$1我也明白,就是取行的开头,就是取一个字的意思,
那么(.)\\1到底表示的是什么意思?

作者: Vista    时间: 2014-8-6 23:15
(x)表示把x封装成一个组,1代表组的标号为第一组,但是直接写1则表示一个字符,所以要把1转义用\\1表示。
$1代表第一组中的内容,同理$2代表第二组的内容。
作者: bbdeyouxang    时间: 2014-8-6 23:25
\1 引用第一个括号内容
作者: 吴杰栋    时间: 2014-8-7 08:08
Vista 发表于 2014-8-6 23:15
(x)表示把x封装成一个组,1代表组的标号为第一组,但是直接写1则表示一个字符,所以要把1转义用\\1表示。
$ ...

意思就是(.)\\1+表示的是(我我我我我)(要要要要)(睡睡睡睡)(觉觉觉觉)这几个组,然后$1就是取这几个组中的一个字就可以?
作者: Vista    时间: 2014-8-7 08:24
吴杰栋 发表于 2014-8-7 08:08
意思就是(.)\\1+表示的是(我我我我我)(要要要要)(睡睡睡睡)(觉觉觉觉)这几个组,然后$1就是取这几个组中的 ...

我我我我我要要要要睡睡睡睡觉觉觉觉
在这个里面,应该这样理解,
(.)首先代表(我),然后\\1引用()里面的内容就是引用“我”,
$1代表引用第一组的内容也就是()里面的,所以$1表示“我”。
“+”代表一次或多次,所以匹配“我我我我我”,
String s2 = s1.replaceAll("(.)\\1+", "$1");//就是把“我我我我我”替换成“我”
其他的和上面一样理解。
讲的不清楚还请见谅,我上课去了,拜~
作者: yqj    时间: 2014-8-7 14:17
也可以这样写
  1. String str = "我我我我我....要要要要...睡睡睡睡....觉觉觉觉";
  2.         String s2 =str.replaceAll("(.)\\1*(\\.)*", "$1");
  3.         System.out.println(s2);
复制代码

"(.)\\1*(\\.)*"的解释:  \\1是对第一组("(.)")的引用,\\1*是代表在"\\1*"的位置第一组出现0次或多次,"(\\.)*"代表点好出现0次或多次,“(\\.)*”也可写成“\\.+”




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