导航
×
   ❮   
HTML CSS JavaScript PHP Go ECMS

PHP 正则表达式


什么是正则表达式?

正则表达式是构成搜索模式的字符序列。当你在一则文本中搜索数据时,你可以使用这个搜索模式来描述你正在搜索的内容。

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

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


语法

在 PHP 中,正则表达式是由分隔符、模式和可选的修饰符组成的字符串。

$exp = "/freew3c/i";

在上面的实例中,/ 是 **分隔符**,freew3c 是正在搜索的 **模式**,而 i 是一个 **修饰符**,它使搜索不区分大小写。

分隔符可以是任何不是字母、数字、反斜杠或空格的字符。最常用的分隔符是正斜杠(/),但当你的模式包含正斜杠时,选择其他分隔符(如 # 或 ~)会更方便。


正则表达式函数

PHP 提供了多种允许你使用正则表达式的函数。

最常用的函数是

函数 描述
preg_match() 如果字符串中找到该模式,则返回 1,否则返回 0
preg_match_all() 返回字符串中找到该模式的次数,也可能为 0
preg_replace() 返回一个新字符串,其中匹配的模式已被另一个字符串替换

使用 preg_match()

preg_match() 函数会告诉你一个字符串是否包含模式的匹配项。

实例

使用正则表达式对字符串中的“w3schools”执行不区分大小写的搜索

$str = "Visit Freew3c";
$pattern = "/freew3c/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, "Freew3c", $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} 匹配包含 3n 序列的任何字符串 试一试 »
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 正则表达式参考

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


freew3c.com 中文网是独立运营的中文开发者学习平台,与 freew3c.com 无关联。提供的内容仅用于学习和测试,不保证内容的正确性。


Copyright @2020-2026 京ICP备888888号-8