正则表达式没那么难
Posted wangjunling888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式没那么难相关的知识,希望对你有一定的参考价值。
正则表达式没那么难
[] 表示一位字符
[a] 表示字母a
String regex = "[a]" System.out.println("a".matches(regex));//true System.out.println("aa".matches(regex));//false System.out.println("b".matches(regex)); //false
[abc] 表示包含abc中任意一位
String regex = "[a]" System.out.println("a".matches(regex));//true System.out.println("aa".matches(regex));//false System.out.println("b".matches(regex)); //true
^为取非
[^a] 表示非a的字母
String regex = "[^a]"; System.out.println("a".matches(regex));//false System.out.println("aa".matches(regex));//false, 两位了, System.out.println("b".matches(regex)); //true
-为区间连接符, 两头表示范围
a-z表示从a到z, 0-9 表示从0到9 A-Z表示A到Z
String regex = "[0-9]"; System.out.println("a".matches(regex));//false System.out.println("1".matches(regex));//true
. 表示任意字符
量词 ?, *, + m,n
? 附加到某一位后面表示当前位出现一次或者一次也没有, 次数<=1
String regex = "[0-9]?"; System.out.println("1".matches(regex));//true System.out.println("".matches(regex));//true System.out.println("a".matches(regex));//false, 注意这个不算没出现
*表示出现次数大于等于0 次数>=0
String regex = "[0-9]*"; System.out.println("1".matches(regex));//true System.out.println("123".matches(regex));//true System.out.println("".matches(regex));//true System.out.println("a".matches(regex));//false, 注意这个不算没出现
+表示出现次数大于等于1 次数>=1
String regex = "[0-9]+"; System.out.println("1".matches(regex));//true System.out.println("123".matches(regex));//true System.out.println("".matches(regex));//false System.out.println("a".matches(regex));//false, 注意这个不算没出现
m, n
String regex = "[0-9]3,5"; System.out.println("1".matches(regex));//false System.out.println("12".matches(regex));//false System.out.println("123".matches(regex));//true System.out.println("12345".matches(regex));//true System.out.println("123456".matches(regex));//false //注意空号中参数可以使用一个,n表示有且仅有n个 String regex = "[0-9]3,5"; System.out.println("12".matches(regex));//false System.out.println("123".matches(regex));//true System.out.println("12345".matches(regex));//false //n,表示大于等于n String regex = "[0-9]3"; System.out.println("12".matches(regex));//false System.out.println("123".matches(regex));//true System.out.println("12345".matches(regex));//true
常用字符标识
\\d 表示0-9之间的数组相当于[0-9], \\D表示非数字
String regex = "\\\\d"; //第一个\\为转义字符 System.out.println("1".matches(regex));//true System.out.println("a".matches(regex));//false String regex = "\\\\D"; //第一个\\为转义字符 System.out.println("1".matches(regex));//false System.out.println("a".matches(regex));//true
\\s 表示空白字符相当于 [ \\t\\n\\x0B\\f\\r], 可以理解为看不到的都算是空白字符 \\S相当于对\\s取反
String regex = "\\\\s"; //第一个\\为转义字符 //空格 System.out.println(" ".matches(regex));//true //回车 System.out.println("\\r".matches(regex));//true //换行 System.out.println("\\n".matches(regex));//true //无字符 System.out.println("".matches(regex));//false System.out.println("a".matches(regex));//false
\\w表示单词字符, 所有大小写字母,数字和下划线相当于[a-zA-Z_0-9], \\W相当于\\w取反
String regex = "\\\\w"; //第一个\\为转义字符 //空格 System.out.println(" ".matches(regex));//false //回车 System.out.println("\\r".matches(regex));//false System.out.println("a".matches(regex));//true System.out.println("1".matches(regex));//true System.out.println("_".matches(regex));//true System.out.println("#".matches(regex));//false
分组, 正则表达式中用()表示小组, 可以通过计算开括号来编号, 分好的组可以通过编号替代,第0组代表整个表达式,先看代码吧
String regex = "(h((a)(b)))\\\\1\\\\2\\\\3\\\\4"; System.out.println("habhababab".matches(regex));//true
解释上面的规则:
首先表达式前面(h((a)(b)))表示 一个h, 一个a,一个b如果没有后面的数组部分怎 匹配记过就是 hab, 后面的数组\\\\n表示组数, 组数的规律是从左往右找开括号, 按照分组规律可以将表达式分为下面四组
- 第一组 (h((a)(b))) 从第一个开括号开始到对应的闭括号结束
- 第二组 ((a)(b)) 从第二个开括号开始, 到第二个闭括号结束
- 第三组 (a)
- 第四组 (b)
所以对应的结果habhababab应该是 hab hab(第一组) ab(第二组) a(第三组)b(第四组)
至此, 正则的基本语法基本完毕, 下面来两个小练习,
用户名要求6-16位数字字母或下划线
"\\w6,16"
匹配出叠词
"(.)\\\\1(.)\\\\2
匹配指定位数qq号码
//6-9位数的qq号码 "\\d6,9"
好了今天的学习总结就到这里, 感兴趣的朋友可以参看这里 菜鸟教程 虽然有点像w3c但是感觉这个网站提供的小工具还是挺好用的, 鉴于笔者学疏才浅如有错误请在评论区指出, 以便互相促进技术的提升!!!
以上是关于正则表达式没那么难的主要内容,如果未能解决你的问题,请参考以下文章