A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴杰栋 中级黑马   /  2014-8-6 22:34  /  1367 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  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到底表示的是什么意思?

5 个回复

倒序浏览
(x)表示把x封装成一个组,1代表组的标号为第一组,但是直接写1则表示一个字符,所以要把1转义用\\1表示。
$1代表第一组中的内容,同理$2代表第二组的内容。
回复 使用道具 举报
\1 引用第一个括号内容
回复 使用道具 举报
Vista 发表于 2014-8-6 23:15
(x)表示把x封装成一个组,1代表组的标号为第一组,但是直接写1则表示一个字符,所以要把1转义用\\1表示。
$ ...

意思就是(.)\\1+表示的是(我我我我我)(要要要要)(睡睡睡睡)(觉觉觉觉)这几个组,然后$1就是取这几个组中的一个字就可以?
回复 使用道具 举报
吴杰栋 发表于 2014-8-7 08:08
意思就是(.)\\1+表示的是(我我我我我)(要要要要)(睡睡睡睡)(觉觉觉觉)这几个组,然后$1就是取这几个组中的 ...

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

"(.)\\1*(\\.)*"的解释:  \\1是对第一组("(.)")的引用,\\1*是代表在"\\1*"的位置第一组出现0次或多次,"(\\.)*"代表点好出现0次或多次,“(\\.)*”也可写成“\\.+”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马