PHP preg_match():正则表达式 (Regex)
PHP 中的正则表达式是什么?
PHP 正则表达式 也称为正则表达式,是一种功能强大的模式匹配算法,可以在单个表达式中执行。正则表达式使用算术运算符(如 (+、-、^))来创建复杂表达式。它们可以帮助您完成验证电子邮件地址、IP 地址等任务。
为什么要使用正则表达式
- PHP 正则表达式通过调用单个函数简化了字符串数据中的模式识别。这节省了我们的编码时间。
- 在验证用户输入(如电子邮件地址、域名、电话号码、IP 地址)时,
- 在搜索结果中突出显示关键字
- 创建自定义 HTML 模板时,可以使用 PHP 中的正则表达式来识别模板标签并将其替换为实际数据。
PHP 中的内置正则表达式函数
PHP 内置了允许我们使用正则函数的函数,我们将在本篇 PHP 正则表达式教程中学习这些函数。让我们来看看 PHP 中常用的正则表达式函数。
- PHP 中的 preg_match() – 此函数用于在 PHP 中对字符串执行模式匹配。如果找到匹配项,则返回 true;如果未找到匹配项,则返回 false。
- PHP 中的 preg_split() – 此函数用于对字符串执行模式匹配,然后将结果拆分为数字数组
- PHP 中的 preg_replace() – 此函数用于对字符串执行模式匹配,然后用指定的文本替换匹配项。
以下是正则表达式函数的语法,例如 PHP preg_match()、PHP preg_split() 或 PHP preg_replace()。
<?php function_name('/pattern/',subject); ?>
这里,
- “function_name(…)” 可以是 PHP preg_match()、PHP preg_split() 或 PHP preg_replace()。
- “/…/” 正斜杠表示我们的 PHP 正则表达式测试函数的开始和结束
- “'/pattern/'”是我们需要匹配的模式
- “subject” 是要匹配的文本字符串
现在让我们看一下实现上述 PHP 正则表达式函数的实际例子。
PHP 中的 Preg_match()
第一个例子使用 PHP 函数中的 preg_match() 对给定 URL 中的单词 guru 执行简单的模式匹配。
下面的代码展示了上述示例的 preg_match() 测试函数的实现。
<?php $my_url = "www.guru99.com"; if (preg_match("/guru/", $my_url)) { echo "the url $my_url contains guru"; } else { echo "the url $my_url does not contain guru"; } ?>
浏览到 URL http://localhost/phptuts/preg_match_simple.php
让我们检查一下负责输出的代码部分“preg_match('/guru/', $my_url)” 这里,
- “preg_match(…)” 是 PHP 正则表达式函数
- “'/guru/'” 是需要匹配的正则表达式模式
- “$my_url” 是包含要匹配的文本的变量。
下图总结了以上几点
PHP Preg_split()
现在让我们看另一个使用 PHP 函数 preg_split() 的例子。
我们将取一个字符串短语并将其分解成一个数组;要匹配的模式是一个空格。
本例中使用的文本字符串是“我爱正则表达式”。
下面的代码说明了上述示例的实现。
<?php $my_text="I Love Regular Expressions"; $my_array = preg_split("/ /", $my_text); print_r($my_array ); ?>
浏览到 URL http://localhost/phptuts/preg_split.php
PHP Preg_replace()
现在让我们看看 preg_replace() PHP功能 执行模式匹配,然后用其他内容替换该模式。
下面的代码搜索单词 guru 绳子.
它用突出显示背景颜色的 css 代码包围的单词 guru 替换单词 guru。
<?php $text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com"; $text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text); echo $text; ?>
假设您已保存文件 preg_replace.php,请浏览至以下 URL http://localhost/phptuts/preg_replace.php
正则表达式元字符
上述示例使用了非常基本的模式;元字符只是允许我们执行更复杂的模式匹配,例如测试电子邮件地址的有效性。现在让我们看看常用的元字符。
元字符 | 描述 | 例如: |
---|---|---|
. | 匹配除换行符之外的任意单个字符 | /./ 匹配任何只有一个字符的内容 |
^ | 匹配字符串的开头/排除字符 | /^PH/ 匹配以 PH 开头的任何字符串 |
$ | 匹配字符串末尾的模式 | /com$/ 匹配 guru99.com、yahoo.com 等等。 |
* | 匹配任意零 (0) 个或多个字符 | /com*/ 匹配计算机、通信等。 |
+ | 要求前面的字符至少出现一次 | /yah+oo/ 匹配 yahoo |
\ | 用于转义元字符 | /yahoo+\.com/ 将点视为文字值 |
[...] | 字符类 | /[abc]/ 匹配 abc |
AZ | 匹配小写字母 | /az/ 匹配 cool、happy 等等。 |
A-Z | 匹配大写字母 | /AZ/ 匹配 WHAT、HOW、WHY 等。 |
0-9 | 匹配 0 到 9 之间的任意数字 | /0-4/ 匹配 0,1,2,3,4 |
上面的列表仅给出了正则表达式中最常用的元字符。
现在让我们看一个检查电子邮件地址有效性的相当复杂的例子。
<?php $my_email = "name@company.com"; if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/", $my_email)) { echo "$my_email is a valid email address"; } else { echo "$my_email is NOT a valid email address"; } ?>
解释模式“[/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/]”
这里,
- “'/…/'” 开始和结束正则表达式
- “^[a-zA-Z0-9._-]” 匹配任意大写或小写字母、0 到 9 之间的数字以及点、下划线或破折号。
- “+@[a-zA-Z0-9-]” 匹配 @ 符号后跟的小写或大写字母、0 到 9 之间的数字或破折号。
- “+\.[a-zA-Z.]{2,5}$/” 使用反斜杠转义点,然后匹配字符串末尾字符长度在 2 到 5 之间的任何小写或大写字母。
浏览到 URL http://localhost/phptuts/preg_match.php
从上面的示例细分中可以看出,在匹配模式时,元字符非常强大。
结语
- PHP 中的正则表达式或 Regex 是一种模式匹配算法
- 正则表达式在执行验证检查、创建识别标签的 HTML 模板系统等时非常有用。
- PHP 内置了支持正则表达式的函数 PHP preg_match()、PHP preg_split() 和 PHP preg_replace()。
- 元字符使我们能够创建复杂的模式