Java正则表达式总结笔记

 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=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"); } }



你可能感兴趣的:(Java学习笔记)