- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
正则表达式
使用单个字符串来描述、匹配一系列符合某个语法规则的字符串
输入验证
查找替换操作
高级字符串操作
文件搜索或重命名
白名单和黑名单
常规匹配(简单字符)
一串不包含特殊字符的正则表达式匹配他自己
范例
[root@localhost ~]# cat /etc/passwd|grep test
匹配包含test的行
特殊字符
\是转义字符,其后面的字符会代表不同的意思,转义字符主要有三个作用:
第一种,是为了匹配不方便显示的特殊字符,比如换行,tab符号等
第二种,正则中预先定义了一些代表特殊意义的字符,比如\w等
第三种,在正则中某些字符有特殊含义(比如下面说到的),转义字符可以让其显示自身的含义
匹配*包围的子串
\*[^\*]*\*
下面是常用转义字符列表:
字符集
有时需要匹配一类字符,字符集可以实现这个功能
语法:[ ]分隔
范例:
[abc] #匹配a或b或c
范例:
能匹配到:apple banana
不能匹配到:king author 345%5
[0-9] #匹配0到9中的一个数字 即[0123456789]
范例:
能匹配到:8777 0xEEEEE
不能匹配到:king author _icon%
在前面添加^,可表示非的意思
[^abc] 匹配abc外的所有字符中的一个
范例:
非法用户名 [^a-zA-Z0-9_] 只允许大小写字母、数字、下划线
正则规定的特殊字符,与上述一致
. #匹配除换行外的任意一个字符
\w #匹配任意数字或字母或下划线 [0-9a-Z_]
\d #匹配任意一个数字 [0-9]
量词
匹配多次某个字符
正则中的量词有多个,如?、+、*、{n}、{m,n}、{m,}
{n} 匹配n次
a{2} 匹配aa
{m,n} 匹配m次 - n次 优先匹配n次
b{2,4} 匹配bb,bbb,bbbb 优先匹配bbbb
{m,} 匹配m-∞次,优先匹配∞次,比如a{1,},可以匹配aaaa...
? 匹配0次或1次,优先匹配1次,相当于{0,1}
+ 匹配1-n次,优先匹配n次,相当于{1,}
* 匹配0-n次,优先匹配n次,相当于{0,}
正则默认和人心一样是贪婪的,也就是常说的贪婪模式,凡是表示范围的量词,都优先匹配上限而不是下限
有时候这不是我们想要的结果,可以在量词后面加上?,就可以开启非贪婪模式
a{1, 3}? // 匹配字符串'aaa'的话,会匹配a而不是aaa
范例:
匹配六个字符的16进制数
[0-9A-F]{6}
字符边界
有时我们会有边界的匹配要求,比如已xxx开头,已xxx结尾
^在[]外 表示 匹配开头的意思
^abc // 可以匹配abc,但是不能匹配aabc
$ 表示 匹配结尾的意思
abc$ // 可以匹配abc,但是不能匹配abcc
上面提到的\b表示单词的边界
abc\b // 可以匹配 abc ,但是不能匹配 abcc
范例:匹配国内手机号
^1[3-9][0-9]{9}
选择表达式
有时我们想匹配x或者y,如果x和y是单个字符,可以使用字符集,[abc]可以匹配a或b或c,如果x和y是多个字符,字符集就无能为力了,此时就要用到分组
正则中 用|来表示分组,a|b表示匹配a或者b的意思
123|456|789 // 匹配 123 或 456 或 789
[ ] 单个字符 | 多个字符
分组与引用
分组是正则中非常强大的一个功能,可以让上面提到的量词作用于一组字符,而非单个字符,分组的语法是圆括号包裹(xxx)
(abc){2} // 匹配abcabc
分组不能放在[]中,分组中还可以使用选择表达式
(123|456){2} // 匹配 123123、456456、123456、456123
和分组相关的概念还有一个捕获分组和非捕获分组,分组默认都是捕获的,在分组的(后面添加?:可以让分组变为非捕获分组,非捕获分组可以提高性能和简化逻辑
和分组相关的另一个概念是引用,比如在匹配html标签时,通常希望<xxx></xxx>后面的xxx能够和前面保持一致
引用的语法是\数字,数字代表引用前面第几个捕获分组,注意非捕获分组不能被引用
<([a-z]+)><\/\1> // 可以匹配 `<span></span>` 或 `<div></div>`等
回溯
回溯允许引用之前捕获的子字符串。
匹配第一组可以使用 \1,匹配第二组可以使用 \2,依此类推…
售前咨询
售后咨询
备案咨询
二维码
TOP