首页后端开发PHPPHP正则表达式preg_match_all()的作用和用法是什么

PHP正则表达式preg_match_all()的作用和用法是什么

时间2024-03-22 12:25:03发布访客分类PHP浏览804
导读:这篇文章给大家介绍了“PHP正则表达式preg_match_all( 的作用和用法是什么”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“PHP正则表达式preg_match_all( 的作用和用法是什么”有一定的帮助,希望大家...
这篇文章给大家介绍了“PHP正则表达式preg_match_all()的作用和用法是什么”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“PHP正则表达式preg_match_all()的作用和用法是什么”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

在之前的文章中,我们介绍了正则表达式的一些基础定义以及preg_match() 函数的基础应用,使用正则表达式的主要目的就是为了通过简单的办法来实现强大的功能。为了简单、有效而又不失强大,造成了正则表达式规则的复杂,构建正确、有效的正则表达式更是难度较大,所以只用一个preg_match() 函数不足以应付。

正则表达式是在处理文本数据时的一项重要而复杂的技术。而一些文本编辑器也使用正则表达式实现高级别的“搜索/替换”功能。想要实现更多的功能就需要了解更多的函数,接下来我们就来看一下,正则表达式更多的函数知识吧。

preg_match_all()函数

之前我们只介绍了preg_match() 函数这一种基础函数,在 PHP 中还有一个和 preg_match() 函数极为类似的函数——preg_match_all(),该函数可以搜索字符串中所有可以和正则表达式匹配的结果。

该函数的语法格式如下:

preg_match_all($pattern, $subject [, &
    $matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])

其中需要注意的是:

$pattern表示要搜索的模式,也就是定义好的正则表达式;$subject表示要搜索的字符串;$matches表示可选参数是个多维数组,用来存放所有匹配的结果, 数组排序通过 $flags 指定;$offset表示可选参数,$offset 用于从目标字符串中指定位置开始搜索,它的单位是字节。

$flags表示可选参数,其中它可以结合下面几个标记使用,

  • PREG_PATTERN_ORDER

结果排序为 $matches[0] 保存完整模式的所有匹配,$matches[1] 保存第一个子组的所有匹配,以此类推。

  • PREG_SET_ORDER

结果排序为 $matches[0] 包含第一次匹配得到的所有匹配(包含子组), $matches[1] 是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。

  • PREG_OFFSET_CAPTURE

如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的偏移量。注意这会改变 $matches 中的每一个匹配结果字符串元素,使其成为一个第 0 个元素为匹配结果字符串,第 1 个元素为匹配结果字符串在 subject 中的偏移量。

其中不能同时使用 PREG_PATTERN_ORDER PREG_SET_ORDER,preg_match_all() 函数可以返回 $pattern 的匹配次数(可能是 0),如果发生错误则返回 FALSE

接下来我们通过示例来看一下preg_match_all() 函数的应用,匹配一个字符串,示例如下:

?php
    $subject = "abcdefghijkdefabcedfdefxyzdef";
    
    $pattern_1 = '/(def)(abc)/';
    
    $num_1 = preg_match_all($pattern_1, $subject, $matches_1,PREG_PATTERN_ORDER);
    
    echo "pre>
    ";
    
    var_dump($matches_1);
    
    var_dump($num_1);
    
    $pattern_2 = '/(def)(abc)/';
    
    $num_2 = preg_match_all($pattern_2, $subject, $matches_2,PREG_OFFSET_CAPTURE, 3);
    
    var_dump($matches_2);
    
    var_dump($num_2);
    
?>
    

输出结果:

由上述示例中,我们便完成了通过preg_match_all() 函数来匹配一个字符串。通过preg_match_all() 函数的应用,可以完成全局正则表达式匹配。

那接下来那我们看一下怎样完成检测与给定模式匹配的数组元素。这时候就要用到preg_grep() 函数了。

preg_grep() 函数

使用正则表达式除了可以匹配字符串外,还可以匹配数组中的元素。PHP 中的 preg_grep() 函数可以搜索数组中的所有元素,并返回与正则表达式匹配的所有元素所组成的数组。该函数的语法格式如下:

preg_grep($pattern, $input [, $flags = 0 ])

其中需要注意的是:

$pattern表示要搜索的模式,也就是定义好的正则表达式;$input表示要搜索的数组;$flags表示可选参数,可以设置为 PREG_GREP_INVERT,这时函数会返回数组中与给定模式 $pattern 不匹配的元素组成的数组。perg_grep() 函数将遍历 $input 数组中的每一个元素,让该元素与模式 $pattern 进行匹配,然后将匹配成功或者匹配失败的元素返回。

接下来,我们通过示例来看一下使用 perg_grep() 函数匹配数组中的元素,示例如下:

?php
    $test_arr = array(
        'PHP中文网',
        'http://www.php.cn/',
        'php教程',
        'abcdefg'
    );
    
    $preg = '/^[a-z]/';
    
    $preg_arr_1 = preg_grep($preg, $test_arr);
    
    $preg_arr_2 = preg_grep($preg, $test_arr, PREG_GREP_INVERT);
    
    echo 'pre>
    ';
    
    var_dump($preg_arr_1);
    
    var_dump($preg_arr_2);
    
?>
    

输出结果:

上述示例便是通过preg_grep() 函数匹配数组中的元素。


以上就是关于PHP正则表达式preg_match_all()的作用和用法是什么的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,想要了解更多,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP正则表达式preg_match_all()的作用和用法是什么
本文地址: https://pptw.com/jishu/650498.html
Python time模块的用法是怎样的,能做什么 在Python列表尾部添加元素的方法是什么

游客 回复需填写必要信息