PHP 常用表达
什么是正则表达式?
正则表达式是构成搜索模式的字符序列。当您在文本中搜索数据时,可以使用此搜索模式来描述您要搜索的内容。
正则表达式可以是单个字符,也可以是更复杂的模式。
正则表达式可用于执行所有类型的文本搜索和文本替换操作。
句法
在 PHP 中,正则表达式是由分隔符、模式和可选修饰符组成的字符串。
$exp = "/w3schools/i";
在上面的例子中, /
是个分隔符, w3学校 是个图案 正在搜索的内容,以及 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 = "访问 W3Schools";
$pattern =“/w3schools/i”;
echo preg_match($pattern, $str); // 输出 1
?>
亲自尝试 »
使用 preg_match_all()
这 preg_match_all()
函数将告诉您在字符串中找到了多少个符合模式的匹配项。
例子
使用正则表达式对字符串中“ain”出现的次数进行不区分大小写的计数:
<?php
$str = "西班牙的降雨主要降落在平原上。";
$pattern =“/ain/i”;
echo preg_match_all($pattern, $str); // 输出 4
?>
亲自尝试 »
使用 preg_replace()
这 preg_replace()
函数将用另一个字符串替换字符串中模式的所有匹配。
例子
使用不区分大小写的正则表达式将字符串中的 Microsoft 替换为 W3Schools:
<?php
$str = "访问微软!";
$pattern =“/微软/我”;
echo preg_replace($pattern, "W3Schools", $str); // 输出“访问 W3Schools!”
?>
亲自尝试 »
正则表达式修饰符
修饰符可以改变搜索的执行方式。
修改器 | 描述 |
---|---|
我 | 执行不区分大小写的搜索 |
米 | 执行多行搜索(搜索字符串开头或结尾的模式将匹配每行的开头或结尾) |
你 | 启用 UTF-8 编码模式的正确匹配 |
正则表达式模式
括号用于查找字符范围:
表达 | 描述 |
---|---|
[英文] | 从括号内的选项中查找一个字符 |
[^abc] | 查找不在括号内的任意字符 |
[0-9] | 从 0 到 9 范围内查找一个字符 |
元字符
元字符是具有特殊含义的字符:
元字符 | 描述 |
---|---|
| | 查找由 | 分隔的任意一个模式的匹配项,例如:cat|dog|fish |
. | 仅查找任意字符的一个实例 |
^ | 查找与字符串开头匹配的内容,例如:^Hello |
$ | 在字符串末尾查找匹配项,例如:World$ |
\d | 查找数字 |
\s | 查找空白字符 |
\b | 在单词开头查找匹配项,如下所示:\bWORD,或在单词结尾查找匹配项,如下所示:WORD\b |
\uxxxx | 查找十六进制数 xxxx 指定的 Unicode 字符 |
量词
量词定义数量:
量词 | 描述 |
---|---|
n+ | 匹配至少包含一个 n |
n* | 匹配包含零次或多次出现的任意字符串 n |
否? | 匹配包含零次或一次出现的任意字符串 n |
n{x} | 匹配包含以下序列的任何字符串 X n的 |
n{x,y} | 匹配任何包含 X 到 Y 序列的字符串 n的 |
n{x,} | 匹配任何包含至少 X 个序列的字符串 n的 |
笔记: 如果您的表达式需要搜索某个特殊字符,则可以使用反斜杠 ( \ ) 来转义它们。例如,要搜索一个或多个问号,您可以使用以下表达式:$pattern = '/\?+/';
分组
您可以使用括号 ( )
将量词应用于整个模式。它们还可用于选择要用作匹配的模式部分。
例子
使用分组搜索单词“香蕉”,方法是查找 巴 随后出现了两个纳:
<?php
$str = "苹果和香蕉。";
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str); // 输出 1
?>
亲自尝试 »
完整的 RegExp 参考
如需完整参考,请访问我们的 完整的 PHP 正则表达式参考.
该参考包含所有正则表达式函数的描述和示例。