PHP preg_match(): 正则表达式 (Regex)
PHP 中的正则表达式是什么?
PHP 正则表达式,也称为 regex,是强大的模式匹配算法,可以在单个表达式中执行。正则表达式使用算术运算符,例如 (+,-,^) 来创建复杂的表达式。它们可以帮助您完成诸如验证电子邮件地址、IP 地址等任务。
为什么使用正则表达式
- PHP 正则表达式通过调用单个函数简化了字符串数据中模式的识别。这为我们节省了编码时间。
- 验证用户输入时,例如电子邮件地址、域名、电话号码、IP 地址,
- 突出显示搜索结果中的关键字
- 创建自定义 HTML 模板时。PHP 中的 Regex 可用于识别模板标签并用实际数据替换它们。
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 regex 测试器函数的开始和结束。
- “‘/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 https:///phptuts/preg_match_simple.php
让我们检查负责我们输出的代码部分“preg_match(‘/guru/’, $my_url)” HERE,
- “preg_match(…)”是 PHP regex 函数。
- “‘/guru/'”是要匹配的正则表达式模式。
- “$my_url”是包含要匹配文本的变量。
下图总结了上述要点。
PHP Preg_split()
现在让我们来看另一个使用 PHP 中的 preg_split() 函数的示例。
我们将取一个字符串短语并将其拆分为一个数组;要匹配的模式是单个空格。
此示例中使用的文本字符串是“I Love Regular Expressions”。
下面的代码说明了上述示例的实现。
<?php $my_text="I Love Regular Expressions"; $my_array = preg_split("/ /", $my_text); print_r($my_array ); ?>
浏览到 URL https:///phptuts/preg_split.php
PHP Preg_replace()
现在让我们看看 preg_replace() 在 PHP 函数中,它执行模式匹配然后用其他内容替换模式。
下面的代码在一个 字符串中搜索“guru”一词。
它将“guru”一词替换为被 CSS 代码包围的“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 https:///phptuts/preg_replace.php
正则表达式元字符
上面的示例使用了非常基本的模式;元字符允许我们执行更复杂的模式匹配,例如测试电子邮件地址的有效性。现在让我们看看常用的元字符。
元字符 | 描述 | 示例 |
---|---|---|
. | 匹配除换行符外的任何单个字符 | /./ 匹配任何有单个字符的 |
^ | 匹配字符串的开头/排除字符 | /^PH/ 匹配任何以 PH 开头的字符串 |
$ | 匹配字符串末尾的模式 | /com$/ 匹配 guru99.com、yahoo.com 等。 |
* | 匹配零(0)个或多个字符 | /com*/ 匹配 computer、communication 等。 |
+ | 要求前面的字符至少出现一次 | /yah+oo/ 匹配 yahoo |
\ | 用于转义元字符 | /yahoo+\.com/ 将点视为字面值。 |
[…] | 字符类 | /[abc]/ 匹配 abc |
a-z | 匹配小写字母 | /a-z/ 匹配 cool、happy 等。 |
A-Z | 匹配大写字母 | /A-Z/ 匹配 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 https:///phptuts/preg_match.php
从上面的示例细分可以看出,元字符在模式匹配方面非常强大。
摘要
- PHP 中的正则表达式或 Regex 是模式匹配算法。
- 正则表达式在执行验证检查、创建识别标签的 HTML 模板系统等方面非常有用。
- PHP 具有内置函数,即 PHP preg_match()、PHP preg_split() 和 PHP preg_replace(),它们支持正则表达式。
- 元字符允许我们创建复杂的模式。