前言

正则表达式(regular expression)的用途主要有两种,一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。事实上,给定一个正则表达式,它要么匹配一些文本(进行一次搜索),要么匹配并替换一些文本(进行一次替换)。

匹配

  1. 匹配纯文本
    静态文本(正则表达式是区分字母大小写的)

  2. 匹配任意字符
    .匹配除换行符(\n、\r)之外的任何单个字符

  3. 匹配特殊字符
    使用\字符进行转义
    如果需要搜索\本身,就必须对\字符进行转义;相应的转义序列是两个连续的反斜杠字符\\

  4. 匹配单词
    \< \>匹配词(word)的开始(<)和结束(>)。例如正则表达式<the>能够匹配字符串”for the wise”中的”the”,但是不能匹配字符串”otherwise”中的”the”。(注意:这个元字符不是所有的软件都支持的)

  5. 匹配多个字符中的某一个

  • [ …]
    ​ 匹配 [ ] 中的任意字符。

  • [^ …]
    ​ 匹配 除了 [ ] 中的所有字符

  1. 匹配一组字符
    () 分组,提取

通用原子

​ \s 匹配 所有空白符(等价于 [ \f\n\r\t\v])

​ \S 匹配 非空白符(等价于 [^ \f\n\r\t\v])(后同)

\w: 匹配 字母、数字、下划线,等价于 [A-Za-z0-9_]
​ \d:匹配一个数字等价于[0-9]

用于PCRE风格正则表达式的字符类

[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

匹配次数(后置叠加)

* 匹配前面的内容出现 0 次及以上。
? 匹配前面的内容出现 0 次或 1 次,*和?可以配合使用
+ 出现一次或多次
{x} 匹配任何包含x个前导字符串
{x,y} 匹配任何包含 x 到 y 个前导字符串
{x,} 匹配任何包含至少x个前导字符串
| 选择符 匹配字符串的左边或者右边

匹配特定位置

$ 匹配字符串的行尾
^(前置) 匹配字符串的行首

优先级

  1. \ 转义符
  2. (), (?: ), (?=), [] 圆括号和方括号
  3. *, +, ?, {n}, {n,}, {n,m} 限定符
  4. ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
  5. | 替换,”或”

实例——匹配ip地址

^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$

php修饰符(放在//后)

i 完全不区分大小写
m 可以采用多行识别,遇到换行也承认匹配规则
x 忽略掉规则模式中的空白字符
A 强制从头开始匹配
U 禁止贪婪匹配,只跟踪到最近的一个匹配符并结束
S “.”代表任意字符,包括换行符