PHP preg_match():正则表达式 (Regex)

⚡ 智能摘要

PHP 中的正则表达式是一种模式匹配工具,它使用单个表达式即可验证、分割和替换文本。本教程将介绍核心函数 preg_match、preg_split 和 preg_replace,解释常用的元字符,并逐步构建一个可用的电子邮件验证模式。

  • 🧩 什么是正则表达式: 正则表达式是一种描述文本的模式,它允许一个函数验证、搜索或转换字符串。
  • preg_match: preg_match 测试字符串中是否出现某个模式,如果第一次匹配则返回 true,非常适合用于验证。
  • ✂️ preg_split: preg_split 将字符串按模式分割成数组,例如按空格分割句子。
  • 🔁 preg_replace: preg_replace 查找模式的每个匹配项,并将其替换为新文本,可用于模板和高亮显示。
  • 🔤 元角色: 诸如 .、^、$、* 和 + 之类的符号可以构建复杂的模式,例如将匹配项锚定到开头或结尾。
  • 📧 邮件格式: 字符类和量词组合成一个单一模式,用于检查电子邮件地址是否格式正确。
  • 🤖 人工智能辅助: AI 工具可以根据简单的描述编写正则表达式,并解释或调试复杂的现有模式。

PHP正则表达式

PHP中的正则表达式是什么?

PHP正则表达式正则表达式(也称为正则表达式)是一种强大的模式匹配工具,可以用单个表达式完成多种匹配操作。正则表达式使用特殊字符(例如 +、- 和 ^)来创建复杂的表达式。它们可以帮助您完成验证电子邮件地址、IP 地址等任务。

为什么要使用正则表达式

  • PHP 正则表达式通过调用单个函数简化了字符串数据中模式的识别,从而节省了编码时间。
  • 在验证用户输入的内容时,例如电子邮件地址、域名、电话号码和 IP 地址
  • 在搜索结果中突出显示关键字
  • 创建自定义 HTML 模板时,可以使用 PHP 中的正则表达式来识别模板标签并将其替换为实际数据。

PHP 中的内置正则表达式函数

PHP 内置了一些函数,允许我们使用正则表达式,我们将在本教程中学习这些函数。让我们来看看 PHP 中常用的正则表达式函数。

  • PHP 中的 preg_match() 函数用于对字符串进行模式匹配。如果找到匹配项,则返回 true;如果没有找到匹配项,则返回 false。
  • PHP 中的 preg_split() 函数用于对字符串执行模式匹配,然后将结果拆分为数字数组。
  • PHP 中的 preg_replace() – 此函数用于对字符串执行模式匹配,然后用指定的文本替换匹配项。

下面给出的是正则表达式函数(例如 preg_match()、preg_split() 或 preg_replace())的语法。

<?php
function_name('/pattern/',subject);
?>

这里,

  • “function_name(…)”可以是 preg_match()、preg_split() 或 preg_replace()。
  • “/…/”中的斜杠表示正则表达式的开始和结束。
  • “'/pattern/'”是我们需要匹配的模式
  • “subject” 是要匹配的文本字符串

现在让我们来看一些实现上述 PHP 正则表达式函数的实际例子。

PHP 中的 Preg_match()

第一个例子使用 preg_match() 函数对给定文本中的单词“guru”进行简单的模式匹配。 URL.

下面的代码展示了上述示例中 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()

现在让我们来看另一个使用 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_split()

PHP Preg_replace()

现在让我们来看一下 preg_replace() 函数。 PHP功能 执行模式匹配,然后用其他内容替换该模式。

下面的代码搜索单词 guru 绳子.

它将“guru”一词替换为“guru”一词,并在其周围添加 CSS 代码以突出显示背景颜色。

<?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

PHP Preg_replace()

正则表达式元字符

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

元字符 描述 例如:
. 匹配除换行符之外的任意单个字符 /./ 匹配任何只有一个字符的内容
^ 匹配字符串的开头或排除特定字符 /^PH/ 匹配以 PH 开头的任何字符串
$ 匹配字符串末尾的模式 /com$/ 匹配 guru99.com、yahoo.com 等。
* 匹配零个或多个前面的字符 /com*/ 匹配计算机、通信等。
+ 要求前面的字符至少出现一次 /yah+oo/ 匹配 yahoo
\ 用于转义元字符 /yahoo+\.com/ 将点视为文字值
[...] 字符类 /[abc]/ 匹配 a、b 或 c
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._-]”匹配任何大小写字母、0到9之间的数字以及点、下划线或破折号。
  • “+@[a-zA-Z0-9-]”匹配 @ 符号,后跟小写或大写字母、0 到 9 之间的数字或破折号。
  • “+\.[a-zA-Z.]{2,5}$/” 使用反斜杠转义点,然后匹配字符串末尾长度为 2 到 5 的任何小写或大写字母。

浏览到 URL http://localhost/phptuts/preg_match.php

PHP电子邮件验证模式

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

常见问题

`preg_match` 函数会在找到第一个匹配项时停止,并将该结果填充到 `$matches` 数组中。`preg_match_all` 函数则会找到字符串中的所有匹配项,并将它们全部返回到一个嵌套数组中,这更适合用于示例场景。trac重复项目。

修饰符位于结束分隔符之后,用于改变匹配行为。`i` 修饰符使模式不区分大小写,`m` 修饰符将每一行分别用于 `^` 和 `$` 符号,而 `s` 修饰符允许点号匹配换行符,例如 `/guru/i`。

将模式的不同部分用括号括起来,以创建捕获组。在 preg_match 之后,完整的匹配结果位于 $matches[0] 中,每个捕获组依次位于 $matches[1]、$matches[2] 中,依此类推。

是的。描述一下你想匹配的文本,例如电话号码或日期格式,AI 就能生成匹配模式以及一个 preg_match 示例。在使用前,请务必用真实数据和极端情况进行测试。

是的。粘贴模式,人工智能可以逐个词元地分解它,解释每个部分匹配的内容,指出为什么在某些输入情况下会出错,然后建议一个正确的版本。

总结一下这篇文章: