转义字符
在使用正则表达式时,有时需要用到转义字符进行转义。
想要匹配某些具体的特殊符号,比如+[.?^{|\,需要在前面加上一个转义字符\ 。比如通过 \. 去匹配.号。
最常见的就是\\
限定符(量词):
*表示零次或多次,+表示至少一次,?表示最多一次。{n}表示n次,{n,}表示至少n次。
元字符:
由于元字符一般会放在字符串中,所以需要转义,也就是\会变成 \\ 。
- .
.可以匹配除换行符之外的任何单字符。比如.*表示任意个非换行符\n的字符。
而.*d+.*则表示以任意非\n开始,中间包含至少一个d字符,并且以任意非\n字符结束。
String str="abcdddabc";
String regex=".*d+.*";
if (str.matches(regex)){
System.out.println(true);
}
此处的matches()相当于:
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.matches()){
//...
}
- ^和$
^匹配字符串的开始位置。而$匹配字符串的结尾位置。
^cat : 验证该行以c开头紧接着是a,然后是t。
cat$ : 验证该行以t结尾倒数第二个字符为a倒数第三个字符为c。
^cat$ : 以c开头接着是a->t然后是行结束:只有cat三个字母的数据行。
如下所示:
String str="catdog";
//regex只能匹配cat
String regex="^cat$";
//regex2可以匹配cat开头的字符串
String regex2="^cat.*";
//regex3可以匹配dog结尾的字符串
String regex3=".*dog$";
boolean isMatch1=str.matches(regex);
boolean isMatch2=str.matches(regex2);
boolean isMatch3=str.matches(regex3);
System.out.println(isMatch1+","+isMatch2+","+isMatch3);
- \d
\d表示一个整数,\d{4}表示4个整数,\d+表示任意个整数。\D+表示任意个非整数
\d{4}-\d{2}-\d{2}表示年月日,比如2016-05-05 。
"\\d{4}-\\d{2}-\\d{2}"
- \s
\s表示一个空白字符(如空格、制表符、换页符等等),\s+表示任意多的空白字符。
"\\s"
- \S
\S表示任何一个非空白字符。\S+表示任意多的非空白字符。
"\\S"
- \p
\p{Upper}{2}表示2个大写字母。\p{Lower}{3}表示3个小写字母。
"\\p{Upper}{2}\\p{Lower}{3}\\d{4}"
- \w
\w 匹配字母或数字或下划线或汉字 - \W
\W 不匹配字母或数字或下划线或汉字
中括号表达式:
[]表示:"或". 如:[afg]表示一个为a或者f或者g的字母。
中括号内的-表示范围。[1-9]表示数字1到9中的一个,[1-9]+表示至少一个数字。
[A-Za-z]表示一个任意字母。[A-Za-z]+表示任意多个字母。
中括号内的^表示非。[^xyz]表示任意不包含xyz的字符。比如123,abc之类的。
String str="abdf1459";
//匹配4个小写字母,接着是4个数字
String regex="[a-z]{4}[1-9]{4}";
if (str.matches(regex)) {
System.out.println(true);
}
参考资料:
https://www.runoob.com/regexp/regexp-syntax.html
https://www.cnblogs.com/zery/p/3438845.html