PHP 正则表达式

创建于 2024-12-03 / 27
字体: [默认] [大] [更大]

什么是正则表达式?

正则表达式是形成搜索模式的字符序列。当您在文本中搜索数据时,您可以使用此搜索模式来描述您要搜索的内容。

正则表达式可以是单个字符,也可以是更复杂的模式。

正则表达式可用于执行所有类型的文本搜索和文本替换操作。


语法

在 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!"
?> 亲自试一试 »
Advertisement

-->

正则表达式修饰符

修饰符可以改变搜索的执行方式。

修饰符 描述
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 正则表达式参考

该参考包含所有正则表达式函数的描述和示例。




0 人点赞过