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_split()

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

PHP Preg_replace()

正则表达式元字符

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

元字符 描述 例如:
. 匹配除换行符之外的任意单个字符 /./ 匹配任何只有一个字符的内容
^ 匹配字符串的开头/排除字符 /^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

[/^[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()。
  • 元字符使我们能够创建复杂的模式