轻松上手,快乐学习!

PHP 教程

PHP 教程PHP 简介PHP 下载安装PHP 语法PHP 注释PHP 变量PHP Echo / PrintPHP 数据类型PHP 字符串PHP 数值PHP MathPHP 常量PHP 运算符PHP If...ElsePHP SwitchPHP 循环While 循环Do While 循环For 循环Foreach 循环Break/ContinuePHP 函数PHP 数组索引数组关联数组多维数组数组排序PHP 全局变量$GLOBALS$_SERVER$_REQUEST$_POST$_GETPHP 正则表达式PHP 表单处理PHP 表单验证PHP 表单验证必填字段PHP 表单验证URL/E-mailPHP 表单验证实例PHP 日期和时间PHP IncludePHP 文件处理PHP 文件打开/读取PHP 文件创建/写入PHP 文件上传PHP CookiesPHP SessionsPHP FiltersPHP Filters AdvancedPHP 回调函数PHP JSONPHP 异常处理PHP 什么是 OOPPHP 类和对象PHP 构造函数PHP 析构函数PHP 访问修饰符PHP 继承PHP 类常量PHP 抽象类PHP 接口PHP 特征PHP 静态方法PHP 静态属性PHP 命名空间PHP 可迭代对象MySQL DatabaseMySQL ConnectMySQL Create DBMySQL Create TableMySQL Insert DataMySQL Get Last IDMySQL Insert MultipleMySQL PreparedMySQL Select DataMySQL WhereMySQL Order ByMySQL Delete DataMySQL Update DataMySQL Limit DataPHP XML ParsersPHP SimpleXML ParserPHP SimpleXML - GetPHP XML ExpatPHP XML DOMAJAX IntroAJAX PHPAJAX DatabaseAJAX XMLAJAX Live SearchAJAX PollPHP 实例PHP 编译器PHP 测验PHP 练习

PHP 参考手册

PHP 概述PHP ArrayPHP CalendarPHP DatePHP DirectoryPHP ErrorPHP ExceptionPHP FilesystemPHP FilterPHP FTPPHP JSONPHP KeywordsPHP LibxmlPHP MailPHP MathPHP MiscPHP MySQLiPHP NetworkPHP Output ControlPHP RegExPHP SimpleXMLPHP StreamPHP StringPHP Variable HandlingPHP XML ParserPHP ZipPHP Timezones


PHP 正则表达式


什么是正则表达式?

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

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

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


语法

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

$exp = "/btschools/i";

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

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


正则表达式函数

PHP 提供了多种允许您使用正则表达式的函数。 preg_match()preg_match_all()preg_replace() 函数是一些最常用的函数:

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

使用 preg_match()

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

实例

使用正则表达式对字符串中的"btschools"进行不区分大小写的搜索:

<?php
$str = "Visit BEGTUT";
$pattern = "/btschools/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 替换为 BEGTUT:

<?php
$str = "Visit Microsoft!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "BEGTUT", $str); // Outputs "Visit BEGTUT!"
?>
亲自试一试 »

正则表达式修饰符

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

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

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