组
在了解正则表达式之前,先介绍一下组的概念。
正则表达式中,用()来表示组,在提取时,就可以通过.group(n)来提取组的值。
比如String str =abc\bcab
正则表达式是:(.*)(\\bc)(.*),等于把字符串str分成了三个部分,分别是abc \bc ab。那么可以得到:
gourp(0)=abc\bcab
gourp(1)=abc
gourp(2)=\bc
gourp(3)=ab
注意:其中\\,第一个\表示转义符,因为str字符串中有一个\,我们需要对这个\进行转义才可以匹配得到,所以要加一个转义符\放在前面。
元字符
元字符 | 描述 |
---|---|
\ | 转义字符,对后面紧跟的一个字符进行转义 |
\d | [0-9]的数字 |
\n | 换行符 |
\r | 回车 |
\s | 任何不可见字符 |
\< | 以后面紧跟的字符开始 |
\> | 以前面紧跟的字符结束 |
| | 或运算 |
. | 匹配除了\r和\n之外的任何字符 |
* | 匹配0次或任意次 |
+ | 匹配1次或多次 |
? | 匹配0次或1次 |
{n} | 匹配前面的表达式n次 |
[a-z] | 匹配a-z任意小写字符 |
正则表达式的使用
String str="acccbefccc";
Pattern p=Pattern.conpile("c*"); //定义正则表达式
Matcher m=p.matcher(str);//要匹配的表达式
boolean result=m.matches();//将整个表达式与字符串匹配,正则表达式c*代表的是任意个c的字符串,str字符串不止有c还有abef等字符,所以matches()的结果是false;
boolean result=m.find();//部分匹配,在str中只要找到了任意个c就可以匹配成功,所以find()的结果是true;
//一般正则表达式提取的结果可能有很多个,所以我们会采用数组的形式来保存提取到的结果
List<String> result = new ArrayList<>();
Pattern p=Pattern.conpile("c*"); //定义正则表达式
Matcher m=p.matcher(str);//要匹配的表达式
while(m.find()){
result.add(m.group(0).trim());//.trim()表示去掉空格保存
}
//此时result数组中有两个值,{ccc,ccc}
//可以通过.get()方法,获取数组中的结果
String s=result.get(0);//获取第一个值,结果为ccc
常用的正则表达式
匹配手机电话号码
^1[3|4|5|6|7|8][0-9]\d{8}
以1开头,第二个数字是3-8的任意数字,第三个数字是0-9的任意数字,后面为8个0-9的任意数字。