java正则表达式特点:用一些特定的符号来表示一些代码操作,这样就简化书写。以下正则表达式4个功能。 1、匹配:string matcher(String)方法: 用matches匹配整个字符串,只要有一个规则不符合就匹配失败。 例子:用正则表达式匹配手机号码,默认手机号码为13XXX、15XXX或18XXX开头。 public static void Tel() { String str="17000651207"; String reg="1[358]\\d{9}"; System.out.print(str.matches(reg)); } 一些常用的匹配规则: 字符类: [abc] 这个位只能是abc [^abc] 这个位不能是abc [a-zA-Z] a到z或A到Z,两头的字母都包括 [a-d[m-p]] a到d或m到p 取并集 [a-z&&[def]] def 取交集 [a-z&&[^bc]] a-z与非bc的交集 [a-z&&[^m-p]] a-z与非m到p的交集 ,相当于[a-lq-z] 预定义字符类: . 任何字符 \d 数字[0-9] \D 非数字 在正则表达式中,\都是成对出现的 \s 空白字符 (ascii码中) \S 非空白字符 \w 单词字符 [a-zA-Z_0-9] 字母数字下划线 \W 非单词字符 Greedy数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好n次 X{n,} X,至少n次 X{n,m} X,至少n次,但是不超过m 边界匹配器: \b :单词边界 2、切割:string split(String)方法: 根据规则对字符串进行切割,返回一个String数组。 捕获组的概念:如字符串erkktyqquizz,用.表示任意字符,如果第二位用第一位匹配的结果,则可以表示为"(.)\\1" 例子:用正则表达式切割叠词 public static void Splite() { String str="2aabcdfrslksslkiiiiiwlklaa"; String reg="(.)\\1+"; String temp[]=str.split(reg); for(String s:temp) { System.out.println(s); } } 3、替换字符串:replaceAll(String regex,String replacement) 通过正则表达式,把字符串中符合规则的部分替换为另一个部分。 可以用特殊符号$获取到正则表达式元组中的组。如$1就是获取组的一个元素。 例子:用正则表达式将叠词中的连续字符替换为单个字符 public static void Replace() { String str="jhdflkqqqq3qo98kdhlkjaaakjjjklqq"; String reg="(.)\\1+"; String newStr=str.replaceAll(reg,"$1"); System.out.print(newStr); } 4、获取指定规则的子字符串:(获取) 操作步骤: a、将正则表达式封装成对象。 Pattern对象用compile静态方法 b、让正则对象和要操作的字符串相关联。matche(字符串)返回模式的匹配器对象。用这个对象去处理字符串。 c、关联后,获取正则匹配引擎。 d、通过引擎对符合规则的字串进行操作,比如取出。 Matches对象常用方法: group():返回由以前匹配操作所匹配的输入子序列。 find():尝试查找与该模式匹配的输入序列的下一个子序列,返回boolean类型。 start()\\end() 获取字符串索引位置。 注意:同一个匹配器所用的是同一个指针,所以调用matches以后指针就发生移动了。 例子:找出字符串中连续3个字母组成的字符串 public static void Get() { String str="a bbb cc dddd ee fff"; Pattern p=Pattern.compile("\\b[a-zA-Z]{3}\\b"); Matcher match=p.matcher(str); while(match.find()) System.out.println(match.group()); } 总结: 1、如果想知道该字符串是对是错,用匹配。 2、想要将已有的字符串变成另一个字符串用替换。 3,想要自定义方法将字符串编程多个字符串,用切割。 4、想要拿到符合需求的字符串子串,用获取。 例子:将字符串中的IP地址按地址段分类 public static void IPAddress() { String ip="192.168.0.1 127.0.0.1 220.250.4.3 8.8.8.8 121.222.222.1 191.123.144.5"; String ipArray[]= ip.split(" +"); for(int i=0;i<iparray length="" i="" iparray="" i="" iparray="" i="" replaceall="" d="" 00="" 1="" iparray="" i="" iparray="" i="" replaceall="" 0="" d="" 3="" 1="" for="" string="" s:iparray="" string="" s1="" s="" split="" if="" integer="" parseint="" s1="" 0="">=0 && Integer.parseInt(s1[0])<=127) System.out.println(s+" "+"A_addr"); else if(Integer.parseInt(s1[0])>=128 && Integer.parseInt(s1[0])<=191) System.out.println(s+" "+"B_addr"); else if(Integer.parseInt(s1[0])>=192 && Integer.parseInt(s1[0])<=255) System.out.println(s+" "+"C_addr"); else System.out.println("Error"); } } </iparray>