PHP 正则表达式
什么是正则表达式?
正则表达式是由字符组成的序列,形成搜索模式。当您在文本中搜索数据时,可以使用此搜索模式来描述要搜索的内容。
正则表达式可以是单个字符,也可以是更复杂的模式。
正则表达式可用于执行各种类型的文本搜索和文本替换操作。
语法
在 PHP 中,正则表达式是字符串,由定界符、模式和可选修饰符组成。
$exp = "/w3schools/i";
在上面的示例中,/
是**定界符**,w3schools 是要搜索的**模式**,i
是一个**修饰符**,它使搜索不区分大小写。
定界符可以是任何不是字母、数字、反斜杠或空格的字符。最常见的定界符是正斜杠 (/),但如果您的模式包含正斜杠,则选择其他定界符(例如 # 或 ~)会很方便。
正则表达式函数
PHP 提供了许多函数,允许您使用正则表达式。
最常见的函数是
函数 | 描述 |
---|---|
preg_match() | 如果在字符串中找到模式,则返回 1,否则返回 0 |
preg_match_all() | 返回在字符串中找到模式的次数,也可能是 0 |
preg_replace() | 返回一个新的字符串,其中匹配的模式已被替换为另一个字符串 |
使用 preg_match()
函数 preg_match()
将告诉您字符串是否包含模式的匹配项。
示例
使用正则表达式在字符串中不区分大小写地搜索“w3schools”
$str = "Visit W3Schools";
$pattern = "/w3schools/i";
echo preg_match($pattern, $str);
尝试一下 »
使用 preg_match_all()
函数 preg_match_all()
将告诉您在字符串中找到的模式的匹配项数。
示例
使用正则表达式不区分大小写地计算字符串中“ain”出现的次数
$str = "The rain in SPAIN falls mainly on the plains.";
$pattern = "/ain/i";
echo preg_match_all($pattern, $str);
尝试一下 »
使用 preg_replace()
函数 preg_replace()
将用另一个字符串替换字符串中所有模式的匹配项。
示例
使用不区分大小写的正则表达式将字符串中的 Microsoft 替换为 W3Schools
$str = "Visit Microsoft!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "W3Schools", $str);
尝试一下 »
正则表达式修饰符
修饰符可以改变搜索执行的方式。
修饰符 | 描述 | 尝试一下 |
---|---|---|
i | 执行不区分大小写的搜索 | 尝试一下 » |
m | 执行多行搜索(搜索字符串开头或结尾的模式现在将匹配每行的开头或结尾) | 尝试一下 » |
u | 启用对 UTF-8 编码模式的正确匹配 |
正则表达式模式
方括号用于查找字符范围
表达式 | 描述 | 尝试一下 |
---|---|---|
[abc] | 查找方括号内的一个或多个字符 | 尝试一下 » |
[^abc] | 查找方括号之间没有的任何字符 | 尝试一下 » |
[a-z] | 查找两个字母之间按字母顺序排列的任何字符 | 尝试一下 » |
[A-z] | 查找指定大写字母和指定小写字母之间按字母顺序排列的任何字符 | 尝试一下 » |
[A-Z] | 查找两个大写字母之间按字母顺序排列的任何字符。 | 尝试一下 » |
[123] | 查找方括号内的一个或多个数字 | 尝试一下 » |
[0-5] | 查找两个数字之间的任何数字 | 尝试一下 » |
[0-9] | 查找任何数字 | 尝试一下 » |
元字符
元字符是具有特殊含义的字符
元字符 | 描述 | 尝试一下 |
---|---|---|
| | 查找与以 | 分隔的任何一个模式匹配,如:cat|dog|fish | 尝试一下 » |
. | 查找任何字符 | 尝试一下 » |
^ | 查找字符串开头的匹配项,如:^Hello | 尝试一下 » |
$ | 查找字符串结尾的匹配项,如:World$ | 尝试一下 » |
\d | 查找任何数字 | 尝试一下 » |
查找任何数字 | \D | 尝试一下 » |
查找任何非数字 | \s | 尝试一下 » |
查找任何空白字符 | \S | 尝试一下 » |
查找任何非空白字符 | \w | 尝试一下 » |
查找任何字母字符(a 到 Z)和数字(0 到 9) | \W | 尝试一下 » |
查找任何非字母字符和非数字字符 | \b | 尝试一下 » |
在单词开头查找匹配项,例如:\bWORD,或在单词结尾查找匹配项,例如:WORD\b | \uxxxx | 尝试一下 » |
查找十六进制数字 xxxx 指定的 Unicode 字符
量词
量词定义数量 | 描述 | 尝试一下 |
---|---|---|
量词+ | n | 尝试一下 » |
量词* | 匹配包含至少一个n的任何字符串 | |
量词? | 匹配包含零个或多个n的任何字符串 | |
匹配包含零个或一个n的任何字符串 | n{3} | 尝试一下 » |
匹配包含3个n序列的任何字符串 | n{2, 5} | 尝试一下 » |
量词{3,} | 匹配包含至少 2 个但不超过 5 个n序列的任何字符串 | 尝试一下 » |
匹配包含至少 3 个n序列的任何字符串
注意:如果您的表达式需要搜索一个特殊字符,您可以使用反斜杠 ( \ ) 对它们进行转义。例如,要搜索一个或多个问号,可以使用以下表达式:$pattern = '/\?+/';
分组
示例
您可以使用括号 ( )
将量词应用于整个模式。它们也可以用于选择作为匹配项使用的模式的一部分。
$str = "Apples and bananas.";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str);
尝试一下 »
使用分组来搜索单词“banana”,方法是查找ba后跟两个na实例
完整 RegExp 参考
有关完整参考,请访问我们的 完整 PHP 正则表达式参考。