欢迎访问宙启技术站
智能推送

从零开始学习正则表达式,这10个PHP函数绝不能错过

发布时间:2023-06-04 01:22:14

正则表达式是一种强大的工具,能够对字符串进行高级的匹配和处理。在PHP中,正则表达式常用于验证表单数据、过滤输入、搜索字符串等多个场景。本文将介绍从零开始学习正则表达式所需掌握的基础知识,并列出10个PHP函数,帮助你更好地掌握正则表达式。

一、基础知识

1.语法

正则表达式由一组字符和特殊字符组成,并且遵循特定的语法规范。下面是常用的语法规则:

- 元字符:用于匹配特定的字符(如字母、数字、特殊字符),例如\d(数字)、\w(字母、数字、下划线)、\s(空格、制表符等);

- 限定符:用于指定匹配元字符的数量,例如+(出现一次或多次)、*(出现零次或多次)、?(出现零次或一次)、{n}(出现n次);

- 边界:用于匹配字符串边界或特定字符的边界,例如^(匹配字符串的开头)、$(匹配字符串的结尾)、\b(匹配单词边界);

- 分组:用于分组和操作子字符串,例如(),(?:)(非捕获分组);

- 转义字符:用于匹配元字符本身,例如\+(匹配+字符)。

2.函数

在PHP中,有很多内置函数可以帮助我们操作正则表达式。

二、10个PHP函数

1.preg_match()

preg_match()函数用于查找与指定模式匹配的 个字符串,并返回与该模式匹配的次数。

参数:

- pattern:要检索的模式,可以是一个字符串或一个正则表达式;

- subject:要搜索的字符串;

- matches:用于存储匹配项的数组。

示例:

$pattern = "/php/i";

$subject = "PHP is the web scripting language of choice.";

 

if (preg_match($pattern, $subject, $matches)) {

   echo "Match found!";

} else {

   echo "Match not found.";

}

输出:

Match found!

2.preg_match_all()

preg_match_all()函数与preg_match()函数类似,但是它会匹配所有符合模式的字符串,并返回匹配次数。

参数:

- pattern:要检索的模式,可以是一个字符串或一个正则表达式;

- subject:要搜索的字符串;

- matches:用于存储匹配项的数组;

- flags:选项标志(可选参数),用于指定匹配模式和搜索选项。

示例:

$pattern = "/php/i";

$subject = "PHP is the web scripting language of choice. PHP is used to create dynamic content.";

 

if (preg_match_all($pattern, $subject, $matches)) {

   echo "Match found " . count($matches[0]) . " times.";

} else {

   echo "Match not found.";

}

输出:

Match found 2 times.

3.preg_replace()

preg_replace()函数用于查找和替换与模式匹配的字符串。

参数:

- pattern:要检索的模式,可以是一个字符串或一个正则表达式;

- replacement:用于替换匹配项的字符串;

- subject:要搜索的字符串;

- limit:指定替换的最大次数(可选参数)。

示例:

$pattern = "/php/i";

$replacement = "Java";

$subject = "PHP is the web scripting language of choice.";

 

echo preg_replace($pattern, $replacement, $subject);

输出:

Java is the web scripting language of choice.

4.preg_split()

preg_split()函数用于将一个字符串拆分为一个数组,根据正则表达式匹配的位置进行拆分。

参数:

- pattern:用于分割字符串的模式,可以是字符串或正则表达式;

- subject:要分割的字符串;

- limit:指定拆分的最大次数(可选参数),默认为-1。

示例:

$pattern = "/[\s,]+/";

$subject = "PHP,Java,Python,C++";

 

print_r(preg_split($pattern, $subject));

输出:

Array

(

    [0] => PHP

    [1] => Java

    [2] => Python

    [3] => C++

)

5.preg_grep()

preg_grep()函数用于返回匹配模式的数组元素。

参数:

- pattern:要检索的模式,可以是一个字符串或一个正则表达式;

- input:要搜索的数组;

- flags:选项标志(可选参数),用于指定匹配模式和搜索选项。

示例:

$pattern = "/^PHP/";

$array = array("PHP is the web scripting language of choice.", "Java is not bad.", "Python is also a good choice.");

 

print_r(preg_grep($pattern, $array));

输出:

Array

(

    [0] => PHP is the web scripting language of choice.

)

6.preg_quote()

preg_quote()函数用于转义正则表达式中的特殊字符。

参数:

- str:要转义的字符串;

- delimiter:可选参数,默认使用/作为分隔符。

示例:

$str = "php language is very good!";

 

echo preg_quote($str);

输出:

php language is very good\!

7.preg_last_error()

preg_last_error()函数用于返回最后一次执行preg函数时发生的错误代码。

示例:

$pattern = '/(regex/';

 

preg_match($pattern, "PHP is the web scripting language of choice.");

 

echo "Last error code: " . preg_last_error();

输出:

Last error code: 2

注: preg_last_error()返回的错误代码可以通过preg_error_constant()函数转换成对应的常量。

8.preg_replace_callback()

preg_replace_callback()函数与preg_replace()函数类似,但是它接受一个回调函数来处理匹配项。

参数:

- pattern:用于检索的模式;

- callback:回调函数,在每个匹配项上执行;

- subject:要搜索的字符串;

- limit:指定替换的最大次数(可选参数)。

示例:

function callback($matches) {

   return $matches[1] . "World";

}

 

$pattern = "/(\w+)\s/";

$subject = "Hello PHP, Hello Python, Hello Java";

 

echo preg_replace_callback($pattern, "callback", $subject);

输出:

Hello World, Hello World, Hello World

9.preg_filter()

preg_filter()函数与preg_replace()函数类似,但是它只返回替换后的值。

参数:

- pattern:用于检索的模式;

- replacement:替换值;

- subject:要搜索的字符串;

- limit:指定替换的最大次数(可选参数)。

示例:

$pattern = "/php/i";

$replacement = "Java";

$subject = "PHP is the web scripting language of choice.";

 

echo preg_filter($pattern, $replacement, $subject);

输出:

Java is the web scripting language of choice.

10.preg_match_all()中的$matches

除了preg_match_all()函数以外,还有一种方法可以获得与正则表达式匹配的数据:$matches数组。$matches是用于存储匹配项的数组,在每个匹配项中都会包含一个或多个子组。

示例:

$pattern = "/(\w+)\s(\w+)/";

$subject = "Hello PHP, Hello Python, Hello Java";

 

if (preg_match_all($pattern, $subject, $matches)) {

   echo $matches[0][0] . "

";

   echo $matches[1][0] . "

";

   echo $matches[2][0] . "

";

   echo $matches[0][1] . "

";

   echo $matches[1][1] . "

";

   echo $matches[2][1] . "

";

}

输出:

Hello PHP

Hello

PHP

Hello Python

Hello

Python

注:$matches数组的结构是多维数组,其下标的含义如下:

- $matches[0]:包含完整的字符串匹配项;

- $matches[1]:包含 个子