正则表达式是含有一些具体意义的字符的字符串,这些字符称为正则表达式的元字符。
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一个格式
元字符表
| 元字符 | 正则表达中的写法 | 意义 |
| . | . | 代表任意一个字符 |
| \d | \\d | 代表0~9的任意一个数字 |
| \D | \\D | 代表任意一个非数字字符 |
| \s | \\s | 代表空白字符,如'\t',‘\n’ |
| \S | \\S | 代表非空白字符 |
| \w | \\w | 代表可用作表标识符的字符,即字母或数字或下划线 |
| \W | \\W | 代表不可用作标识符的字符 |
也可以java内置的通用字符簇
| 元字符 | 正则表达中的写法 | 意义 |
| \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{Alpnum} | \\p{Alpnum} | 数字或字母字符 |
| \p{Punct} | \\p{Punct} | 标点符号:`~!@#$%^&*()_-=+{}[]\|;":',<.>/? |
| \p{Graph} | \\p{Graph} | 可见字符:[\p{Alpnum}\p{Punct}] |
| \p{Print} | \\p{Print} | 可打印字符:[\p{Graph}\x20]即可见字符和空格 |
| \p{Blank} | \\p{Blank} | 空格或制表符:[\t] |
| \p{Cntrl} | \\p{Cntrl} | 控制字符:[\x00-\x1F\x7F] |
控制字符,不可见字符,可打印字符和可见字符参考:ascii控制字符(不可见字符)和可打印字符(可见字符)
正则表达式中[]的使用
在正则表达式中可以使用中括号括起来若干字符来表示一个元字符,其中&,|,^分别表示与,或,非。如:
[abc]4: 表示 a4,b4,c4
[^456]: 表示4,5,6之外的任何字符
[a-r]: 表示a-r中的任何一个字符
[a-zA-Z]: 表示任意一个英文字母
[a-e[g-z]]: 表示a-e或g-z中的任意一个字母(并运算)
[a-p&&[def]]: 表示字母d,e,f(交运算)
[a-d&&[^bc]]: 表示字母a,d(差运算)
限定修饰符
在正则表达式中允许使用限定修饰符来限定元字符出现的次数
| 限定修饰符 | 意义 | 示例 |
| ? | 0次或1次 | A? |
| * | 0次或多次 | A* |
| + | 1次或多次 | A+ |
| {n} | 正好出现n次 | A{2} |
| {n,} | 至少n次以上 | A{2,} |
| {n,m} | 出现n~m次 | A{2,3} |
在正则表示式中()的使用
在正则中()一般用于分组,一般和 &,|,^以及限定修饰符搭配,如:
MAC地址:12-CD-EE-FF-cf-dF
正则表达式匹配规则:[0-9A-Fa-f]{2}(-[0-9A-Fa-f]{2}){5}
以常见的email为例
public static void main(String[] args) {
//以常见的E-mail地址为例,通常情况下E-mail的格式为X@X.com
//X表示任意字符,".com"表示后缀名,可以是2个或3个字符,需要注意是X可以包含".cn"或".com"的字符
//"\\w+@\\w+"表示X@X,"(\\.\\w{2,3})*"表示第二个X中可以出现0次或多次形如".com"的字符,
//"\\.\\w{2,3}"表示以形如".com"或".cn"的字符结尾
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String s1 = "123a@123";
String s2 = "456a@456.c";
String s3 = "2145ab@chenfuzhe.com";
String s4 = "2145*@qq.edu.com";//\\w匹配的是字母或数字或下划线,不包括*
if(s1.matches(regex)){
System.out.println(s1+"符合email地址的正则表达式");
}
if(s2.matches(regex)){
System.out.println(s2+"符合email地址的正则表达式");
}
if(s3.matches(regex)){
System.out.println(s3+"符合email地址的正则表达式");
}
if(s4.matches(regex)){
System.out.println(s4+"符合email地址的正则表达式");
}
}
输出结果是:
2145ab@chenfuzhe.com符合email地址的正则表达式
参考资料:
《java从入门到精通》第四版 明日科技 著 2016年10月
637

被折叠的 条评论
为什么被折叠?



