原文网址
学习笔记
元字符
- 查找元字符本身,需要用\取消这些词的特殊意义,如\. \* \\等
重复(限定符)
- * 重复零次或更多次
- + 重复一次或更多次
- ? 重复零次或一次
- {n} 重复n次
- {n,} 重复n次或更多次
- {n,m} 重复n到m次
字符类
- [aeiou]就匹配任何一个英文元音字母
- [.?!] 匹配标点符号(.或?或!)
- [0-9]=\d [a-z0-9A-Z_]=\w
- 理解这个, \(?0\d{2}[) -]?\d{8}
分枝条件
- 指正则表达式有几种规则,满足之一就算匹配,规则用 | 隔开
- 0\d{2}-\d{8}|0\d{3}-\d{7} 匹配两种以连字号分隔的电话号码:一种三位区号,8位本地号,一种是4位区号,7位本地号
- \(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8} 匹配3位区号的电话号码,其中区号可以用小括号括起来,也可不用,区号与本地号间可用连字号或空格间隔,也可以没有间隔。可以试试用分枝条件把这个表达式扩展成也支持4位区号
- \d{5}-\d{4}|\d{5} 匹配美国的邮政编码,5位数字或用连字号间隔的9位数字,注意顺序(因为测试从左至右,满足分枝条件之一就不再管其他)
分组
- 重复多个字符时建议使用分组,即使用小括号指定子表达式
- (\d{1,3}\.){3}\d{1,3} \d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体)重复3次,最后再加上一个一到三位的数字(\d{1,3})
- 自行理解(IP) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
反义
- 查找不属于某个能简单定义字符类的字符
- \W 匹配任意不是字母,数字,下划线,汉字的字符
- \S 匹配任意不是空白符的字符
- \D 匹配任意非数字的字符
- \B 匹配不是单词开头或结束的位置
- [^x] 匹配除了x以外的任意字符
- [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
- 例子
- \S+ 匹配不包含空白符的字符串
- <a[^>]+> 匹配用尖括号括起来的以a开头的字符串
后向引用
- 小括号指定一个子表达式,匹配这个子表达式的文本,可以在表达式或是其他程序中做其他后续处理,默认情况下,每个分组拥有一个组号,从左向右,1,2,......