上篇讲了正则表达式的元字符和量词,对正则表达式也有了一个初步的了解。这篇学习下字符组和分支
1.字符组
字符组就是用[]来匹配任意一个字符,比如我们想找到包含字符a或u的单词。就可以通过字符组来写规则:
#\b[a-z]*[au][a-z]*#i
另外字符组里-表示范围,如果要匹配包含-的字符,[]里一定要对-进行转义,即[\-],那像(),{}在[]要不要进行转义呢,答案是不需要,因为在[]里(),{}只是作为普通字符。
2.分支
比如我们用c[au]t可以匹配cat或cut。那如果我们像匹配包含任意两个字符,比如au,ou等的话,[]这里就不适用了。怎么办,这时候我们就可以用分支。
分支用()界定,并且用|表示分支。比如我们想匹配地区号码,地区号码一种是3位区号,8位本地号(010-12345678),一种是4位区号,7位本地号码(0371-6811605)
正则表达式就可以写成:
#(0{2}\d[\- ]\d{8}|0\d{3}[\- ]\d{7})#
[\- ]表示中间可以是-或空格符
其中|表示分支。
分支匹配需要注意的一点就是顺序,匹配的时候会优先匹配前面的分支,如果匹配成功了,后面的不再匹配。否则接着匹配后面的分支。
比如上面的会优先匹配区号为3位的,又例如美国的邮编是5位数字,也可能是 连字号间隔的9位数字,则可以写成。
#(\d{5}|\d{5}-\d{4})#
但如果反过来的话就是:
#(\d{5}|\d{5}-\d{4})#
那就是匹配5位的邮编,或者9位邮编的前5位了。