首页 > 代码库 > 正则表达式

正则表达式

正则表达式一般用于索引字符串中满足特定规则的子串,或用于匹配判断指定字符串是否满足某种规则,比如校验手机号,身份证号等是否满足格式,网络爬虫中过滤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. 总结

常规开发中正则使用并非频繁,且目前网上也有不少已经写好的匹配规则,基本需要时即可查找到,还有一些更复杂的正则规则文章中并没有提及,需要时再去了解即可,能够做到熟练掌握基本语法基本能够满足开发需要。

正则表达式