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