都2020年了,Java的正则还不会用,是不是太对不起Java 的25岁生日了!来,多少学点简单的。
正则表达式由俩种基本字符类型组成:原义(正常)文本字符和元字符。含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
一、正则表达式元字符一览
元字符 | 正则表达式中的写法 | 意义 |
---|---|---|
. | . | 代表任意一个字符 |
\d | \\d | 代表0-9的任何一个数字 |
\D | \\D | 代表任何一个非数字字符 |
\s | \\s | 代表空白字符,如’\t’、’\n’ |
\S | \\S | 代表非空白字符 |
\w | \\w | 代表可用作标识符的字符(a,A,1,2,_等),但不包括"$" |
\W | \\W | 代表不可用于标识符的字符 |
\p{Lower} | \\p{Lower} | 代表小写字母a-z |
\p{Upper} | \\p{Upper} | 代表大写字母A-Z |
\p{ASCII} | \\p{ASCII} | ASCII字符 |
\p{Alpha} | \\p{Alpha} | 字母字符 |
\p{Digit} | \\p{Digit} | 十进制数字,即0-9 |
\p{Alnum} | \\p{Alnum} | 数字或字母字符 |
\p{Punct} | \\p{Punct} | 标点符号 |
\p{Graph} | \\p{Graph} | 可见字符:[\p{Alnum}\p{Punct}] |
\p{Print} | \\p{Print} | 可打印字符:[\p{Graph}\x20] |
\p{Blank} | \\p{Blank} | 空格或制表符:[\t] |
\p{Cntrl} | \\p{Cntrl} | 控制字符:[\x00-\x1F\x7F] |
注:在正则表达式中“.”代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符“.”,必须使用转义字符“/”。还有就是元字符只能代表一个字符,如下:
//测试
public class Regex {
public static void main(String[] args) {
String test = "ab";
//matches方法为String正则表达式判断的方法
//该字符串符合正则表达式则返回true
System.out.println(test.matches("\\p{Lower}b"));
//打印结果为true
}
}
二、自定义元字符
上表为Java已经给我们定义好的元字符,当然我们也可以自己去定义元字符。正则表达式中自定义元字符的规则:使用方括号括起若干个字符来表示一个元字符。
示例:
自定义元字符 | 意义 |
---|---|
[^456] | 代表4、5、6之外的任何一个字符 |
[a-r] | 代表a-r中的任何一个字符 |
[a-zA-Z] | 可表示任意一个英文字母 |
[a-e[g-z]] | 代表a-e,或者g-z中的任何一个字母(并运算 ) |
[a-o&&[def]] | 代表字母d、e、f(交运算 ) |
[a-d&&[^bc]] | 代表字母a、d(差运算 ) |
不测了,自己去测,不动手还想学会?我看是想学废。
三、限定修饰符
到目前为止我们发现无论是自定义还是原有的元字符,都只是能表示一个字符。总不能我去正则判断个邮箱写十几个元字符吧。
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如: “a?”表示a字符可在字符串中出现0次或一次。
限定修饰符 | 意义 | 示例 |
---|---|---|
? | 0次或1次 | A? |
* | 0次或多次 | A* |
+ | 一次或多次 | A+ |
{n} | 正好出现n次 | A{2} |
{n, } | 至少出现n次 | A{3,} |
{n,m} | 出现n~m次 | A{2,6} |
在这里总结一下需要注意的点:
1)使用限定修饰符出现n次必须是连续出现。
"aba".matches("a*b");//false
"aab".matches("a*b");//true
2)每一个文本字符或者元字符只能代表一个字符(限定符除外)。
"aab".matches("a*");//false
"aab".matches("a*b");//true
讲的比较简单了,开始符,结束符,pattern类等都是没有提到的,如果使用频繁或者深入学习可以自己去百度深入一下,简单匹配这些是够用的啦,告辞!