PHP 正则表达式
1. 什么是正则表达式?
正则表达式(Regular Expression)是由一系列字符组成的搜索模式。当您在文本中搜索数据时,可以使用这种搜索模式来描述您想要查找的内容。
正则表达式可以是一个简单的单一字符,也可以是一个更为复杂的模式。
正则表达式可用于执行所有类型的文本搜索和文本替换操作。
2. 正则表达式语法
在 PHP 中,正则表达式是由分隔符(delimiters)、模式(pattern)以及可选的修饰符(modifiers)组成的字符串。
语法
"/pattern/modifiers"- delimiters(分隔符) - 用于包围模式的字符(例如 /)
- pattern(模式) - 需要搜索的字符序列
- modifiers(修饰符) - 指示如何执行搜索(例如
i表示不区分大小写的搜索)
请看下面这个正则表达式示例:
$exp = "/begindev/i";在这里,/ 是分隔符,w3schools 是要搜索的模式,而 i 是一个修饰符,用于使搜索不区分大小写。
分隔符可以是任何非字母、非数字、非反斜杠且非空格的字符。最常用的分隔符是正斜杠(/),但如果您的模式中本身就包含了正斜杠,那么选择其他字符(如 # 或 ~)作为分隔符会更加方便。
3. 正则表达式修饰符
修饰符用于指定执行搜索的方式。
| 修饰符 | 描述 |
|---|---|
i | 执行不区分大小写的搜索 |
m | 执行多行搜索(查找字符串开头或结尾处匹配的模式现在将匹配每一行的开头或结尾) |
u | 启用 UTF-8 编码模式的正确匹配 |
4. 正则表达式模式
4.1 方括号
方括号用于查找一定范围内的字符:
| 表达式 | 描述 |
|---|---|
[abc] | 查找方括号内的任意一个或多个字符 |
[^abc] | 查找不在方括号内的任意字符 |
[a-z] | 查找按字母顺序介于两个指定字母之间的任意字符 |
[A-z] | 查找按字母顺序介于指定的某个大写字母与指定的某个小写字母之间的任意字符 |
[A-Z] | 查找按字母顺序介于两个指定大写字母之间的任意字符 |
[123] | 查找方括号内的任意一个或多个数字 |
[0-5] | 查找介于两个指定数字之间的任意数字 |
[0-9] | 查找任意数字 |
4.2 元字符
元字符(Metacharacters)是具有特殊含义的字符:
| 元字符 | 描述 |
|---|---|
| | 查找由 | 分隔的任一模式的匹配项如:cat|dog|fish |
. | 查找任意单个字符 |
^ | 查找作为字符串开头的匹配项,例如:^Hello |
$ | 查找在字符串结尾的匹配项,例如:World$ |
\d | 查找任意数字 |
\D | 查找任意非数字字符 |
\s | 查找任意空白字符 |
\S | 查找任意非空白字符 |
\w | 查找任意字母(a 到 Z)和数字(0 到 9) |
\W | 查找任意非字母且非数字字符 |
\b | 查找位于单词开头或结尾的匹配项。开头示例:\bWORD,结尾示例:WORD\b |
\uxxxx | 查找由十六进制数字 xxxx 指定的 Unicode 字符 |
4.3 量词
量词(Quantifiers)用于定义匹配的数量或频次:
| 量词 | 描述 |
|---|---|
n+ | 匹配包含至少一个 n 的任意字符串 |
n* | 匹配包含零个或多个 n 的任意字符串 |
n? | 匹配包含零个或一个 n 的任意字符串 |
n{3} | 匹配包含连续 3 个 n 序列的任意字符串 |
n{2, 5} | 匹配包含至少 2 个、但不超过 5 个 n 的连续序列的任意字符串 |
n{3,} | 匹配包含至少连续 3 个 n 序列的任意字符串 |
注意: 如果您的表达式需要搜索特殊字符本身,您可以使用反斜杠(\)对其进行转义。例如,要搜索一个或多个问号,您可以使用以下表达式:$pattern = '/\?+/';