正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式一般用于索引字符串中满足特定规则的子串,或用于匹配判断指定字符串是否满足某种规则,比如校验手机号,身份证号等是否满足格式,网络爬虫中过滤url链接,等等。
1. 常见规则
[]:方括号中的字符任选其一 [abc]:可以出现一个字符a,b或c [a-z]:可以出现任何一个英文小写字母 [a-z0-9A-Z]:可以出现任意一个数字或字母 ?:左边的内容出现0-1次 [a-z]?:出现一次或0次的任意一个小写字母 *:左边的内容出现任意次 [a-z]*:任意个小写字母 +:左边的内容出现最少一次 [a-z]+:最少一个小写字母 {n}:左边内容出现n次 [a-z]{3}:必须3个小写字母 {n, m}:左边内容出现n到m次 [a-z]{2, 3}:出现2到3个小写字母 {n, }:左边内容出现至少n次 [a-z]{2, }:出现最少2次 .:代表任意一个字符,如果要表示这个点,则需要转义,前面添加反斜杠,即\. .*:任意个任意字符 ^:表示限制开头,在[]中使用表示非操作 ^abc.*:匹配以abc开头的字符串 [^abc]:可以出现一个字符,但不能a,b或c [a-z&&[^c-f]]:可以出现任意一个小写字母,但不能是cdef $:表示限制结尾 .*abc$:匹配以abc为结尾的字符串 ():把括号中的内容看成一个整体 (aa|bb)?:aa或bb两者任选其一 \d:任意一个数字,相当于[0-9] \D:任意一个非数字,相当于[^0-9] \s:任意一个空白字符,包含空格,\n等特殊字符 \S:任意一个非空白字符 \w:任意一个单词字符,数字字母下划线,相当于[0-9a-zA-Z_] \W:任意一个非单词字符 \t:tab符 \n:换行符 \r:回车符
2. 常用正则
手机号码:^1[3|4|5|8][0-9]\d{8}$
身份证号:^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X|x)?$
一个或多个汉字:^[\u0391-\uFFE5]+$
数字,字母,下划线:^[a-zA-Z0-9_]+$
3. Java实现匹配和查找
注意:(1) 和 (2) 步骤不能同时使用,(1) 步骤会将下一个匹配项移除出匹配结果集,这时 (2) 步骤就无法获取到第一个匹配的结果
public class Test { public static void main(String[] args) { String str = "abc|dd"; // 匹配规则,Pattern.CASE_INSENSITIVE表示大小写不敏感,如果没有此参数,则大小写敏感 Pattern p = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE); // 匹配结果,其中维护着一个结果集,可以通过find和group来获取所有结果集 Matcher m = p.matcher(str); // (1) 是否匹配,匹配返回true,不匹配返回false boolean b = m.matches(); // (2) 遍历查找所有匹配的子项,注意先find,然后在获取匹配项 while(m.find()){ // 获取到匹配的子字符串 String matchStr = m.group(); } } }
4. 总结
常规开发中正则使用并非频繁,且目前网上也有不少已经写好的匹配规则,基本需要时即可查找到,还有一些更复杂的正则规则文章中并没有提及,需要时再去了解即可,能够做到熟练掌握基本语法基本能够满足开发需要。
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性