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

Built-in Regular expression Functions

让我们检查负责我们输出的代码部分“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_split()

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

PHP Preg_replace()

正则表达式元字符

上面的示例使用了非常基本的模式;元字符允许我们执行更复杂的模式匹配,例如测试电子邮件地址的有效性。现在让我们看看常用的元字符。

元字符 描述 示例
. 匹配除换行符外的任何单个字符 /./ 匹配任何有单个字符的
^ 匹配字符串的开头/排除字符 /^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

[/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/]

从上面的示例细分可以看出,元字符在模式匹配方面非常强大。

摘要

  • PHP 中的正则表达式或 Regex 是模式匹配算法。
  • 正则表达式在执行验证检查、创建识别标签的 HTML 模板系统等方面非常有用。
  • PHP 具有内置函数,即 PHP preg_match()、PHP preg_split() 和 PHP preg_replace(),它们支持正则表达式。
  • 元字符允许我们创建复杂的模式。