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? | 匹配包含零个或一个 n 的任何字符串 | |
n{3} | 匹配包含 3 个 n 序列的任何字符串 | 试一试 » |
n{2, 5} | 匹配包含至少 2 个但不多于 5 个 n 序列的任何字符串 | 试一试 » |
n{3,} | 匹配包含至少 3 个 n 序列的任何字符串 | 试一试 » |
注意:如果你的表达式需要搜索一个特殊字符,你可以使用反斜杠( \ )来转义它们。例如,要搜索一个或多个问号,你可以使用以下表达式:$pattern = '/\?+/';
分组
你可以使用括号 ( )
将量词应用于整个模式。它们也可用于选择模式的一部分作为匹配项。
示例
使用分组搜索单词“banana”,方法是查找ba后跟两个na的实例
$str = "Apples and bananas.";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str);
自己动手试一试 »
完整 RegExp 参考
如需完整参考,请访问我们的 完整 PHP 正则表达式参考。
该参考包含所有正则表达式函数的描述和示例。