前言
正则表达式(regular expression)的用途主要有两种,一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。事实上,给定一个正则表达式,它要么匹配一些文本(进行一次搜索),要么匹配并替换一些文本(进行一次替换)。
匹配
匹配纯文本
静态文本(正则表达式是区分字母大小写的)匹配任意字符
.
匹配除换行符(\n、\r)之外的任何单个字符匹配特殊字符
使用\字符进行转义
如果需要搜索\本身,就必须对\字符进行转义;相应的转义序列是两个连续的反斜杠字符\\
匹配单词
\< \>
匹配词(word)的开始(<)和结束(>)。例如正则表达式<the>能够匹配字符串”for the wise”中的”the”,但是不能匹配字符串”otherwise”中的”the”。(注意:这个元字符不是所有的软件都支持的)匹配多个字符中的某一个
[ …]
匹配 [ ] 中的任意字符。[^ …]
匹配 除了 [ ] 中的所有字符
- 匹配一组字符
() 分组,提取
通用原子
\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个前导字符串|
选择符 匹配字符串的左边或者右边
匹配特定位置
$
匹配字符串的行尾^
(前置) 匹配字符串的行首
优先级
- \ 转义符
- (), (?: ), (?=), [] 圆括号和方括号
- *, +, ?, {n}, {n,}, {n,m} 限定符
- ^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
- | 替换,”或”
实例——匹配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 “.”代表任意字符,包括换行符