[TOC=3,3]
* * * * *
### 1. 测试工具
我们将使用`RegxTestor`这款工具来调试正则表达式
* * * * *
### 2. 元字符
元字符用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
常用元字符如下:
| 元字符 | 描述 |
| -- | -- |
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线或汉字 |
| \s | 匹配任意空白字符 |
| \d | 匹配数字 |
| \b | 表示单词的开始或结束|
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结束 |
| - | 表示范围 |
| [] | 匹配括号中的任意一个字符 |
| *,+,? | 量词 |
| {} | 量词,如`\d{5,11}`,表示5-11个数字|
* * * * *
### 3. 字符组
·[]`匹配单个字符,尽管看起来有好多字符
`[aeiou]` 匹配其中一个英文字母
`[.?!]` 匹配其中一个标点符号
`c[aou]t` 匹配“cat”,“cot”,“cut”这三个单词
**注意:字符组中的元字符是不需要转义的**
* * * * *
### 4. 转义
php中使用反斜杠(\)表示转义,\Q和\E也可以在模式中忽略正则表达式中的元字符:
`\d+\Q.$.\E$`
以上表达式先匹配一个或多个数字,紧接着一个点号,然后一个$,再然后一个点号,最后是字符串末尾。
也就是说,\Q和\E之间的元字符都会作为普通字符用来匹配。
* * * * *
### 5. 分组
重复单个字符只需要在字符后面加上量词,但如果想重复多个字符又该怎么办呢?可以用小括号指定子表达式,然后规定这个子表达式的重复次数,也可以对子表达式进行其他一些操作。
简单匹配IP地址的表达式如下:
>`(\d{1,3}\.){3}\d{1,3}`
>要理解以上表达式,应按下列顺序分析:
1)匹配1-3位数字;
`\d{1,3}`
2) 匹配3位数字加上1个英文句号(分组),重复3次(最后加上一个1~3位的数字):
`(\d{1,3}\.){3}\d{3}`
事实上,IP地址的每个数字都不能大于255,所以严格来说这个正则表达式是有问题的。
`^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$`
这个正则表达式应该就是匹配IP地址的最终版本。