PHP正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2023-06-13 09:14:36 时间
前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正符。实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数。本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割,匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧。
和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。
下面我们来看一些常用的正则表达式处理函数。
1,preg_match()函数。
函数preg_match()执行一个正则表达式匹配,其定义如下:
intpreg_match(string$pattern,string$subject[,array&$matches[,int$flags=0[,int$offset=0]]])
实际上就是搜索subject中匹配pattern的部分,以保存在数组matches中.请看示例:
复制代码代码如下:
和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。
下面我们来看一些常用的正则表达式处理函数。
1,preg_match()函数。
函数preg_match()执行一个正则表达式匹配,其定义如下:
intpreg_match(string$pattern,string$subject[,array&$matches[,int$flags=0[,int$offset=0]]])
实际上就是搜索subject中匹配pattern的部分,以保存在数组matches中.请看示例:
<?php
$pattern="/<b>.*?<\/b>/";
$string="<b>welcome</b><b>to</b><b>phpfuns</b>dsadsadas";
if(preg_match($pattern,$string,$arr)){
echo"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
print_r($arr);
}else{
echo"<fontcolor="red">正则表达式{$pattern}和字符串{$string}匹配失败</font>";
}
?>
2,preg_match_all()函数。
函数preg_match_all()函数执行一个全局正则表达式匹配,其定义和preg_match()函数一致,只不过匹配了全部结果。请看示例:
<?php
$pattern="/<b>.*?<\/b>/";
$string="<b>welcome</b><b>to</b><b>phpfuns</b>dsadsadas";
if(preg_match_all($pattern,$string,$arr)){
echo"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>";
print_r($arr);
}else{
echo"<fontcolor="red">正则表达式{$pattern}和字符串{$string}匹配失败</font>";
}
?>
依旧是上面的示例(只换了正则处理函数为preg_match_all()),但是匹配的结果数组内容不一样了。
3,preg_replace()函数
函数preg_replace()执行一个正则表达式替换,其定义如下:
mixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject[,int$limit=-1[,int&$count]])
实际上就是搜索subject中匹配pattern的部分,以replacement进行替换.其中limit指的是每个模式在每个subject上进行替换的最大次数.默认是-1(无限).如果指定count,将会被填充为完成的替换次数.
注意:
A,如果subject是一个数组,preg_replace()返回一个数组,其他情况下返回一个字符串.
B,如果匹配被查找到,替换后的subject被返回,其他情况下返回没有改变的subject.如果发生错误,返回NULL.
C,子模式可以应用到参数replacement中,使用方式为\n或者${n}。(在正则表达式的模式中我们只能使用\n的形式来获取已经匹配的子模式,切记!)
D,如果使用模式修正符e,则参数replacement中可以解析函数。(在其它的正则表达式处理函数中,模式修正符e均被忽略!)
请看下面的综合示例:
<?php
$pattern="/(php)|(mysql)/e";
$string="这个字符串中的php和mysql被替换成大写的了!";
$result=preg_replace($pattern,"strtoupper("${1}\2")",$string,-1,$count);
echo$result."<br>";
echo$count;
?>
上例中,我们使用了模式修正符e,这样的话strtoupper()函数就可以当作字符串被解析,这就是模式修正符e的作用!而参数${1}和\2分别是子模式1和子模式2。上例的作用就是将字符串$string中匹配到的子模式php和mysql替换成大写字母!
4,preg_split()函数。
preg_split执行一个正则表达式分隔字符串。其定义如下:
arraypreg_split(string$pattern,string$subject[,int$limit=-1[,int$flags=0]])
实际上就是将subject按照pattern分割,返回分割后的数组。其中,limit将限制分隔得到的子串最多只有limit个,返回的最后一个子串将包含所有剩余部分.limit值为-1,0或null时都代表"不限制"。
我们来看一个示例:
<?php
$pattern="/<p>(.*?)<\/p>/";
$string="这个字符串中的<p>php</p>和<p>mysql</p>被分割了!";
$result=preg_split($pattern,$string,-1,PREG_SPLIT_DELIM_CAPTURE);
print_r($result);
?>
上例中,我们使用了常量PREG_SPLIT_DELIM_CAPTURE设置返回结果中包含子模式(如果设置为PREG_SPLIT_NO_EMPTY,preg_split()将进返回分隔后的非空部分。)我们如果把上例中正则表达式的括号去掉,则结果中不再包含php和mysql这两个匹配成功的子模式。
常用的正则表达式处理函数我们就介绍完了,本节的例子可能会难一些,但希望大家还是认真的试验并体会一下,后面的正则表达式应用部分,我们会经常使用正则表达式处理函数。
相关文章
- PHP count()和sizeof():获取数组长度
- MySQL异常捕获:使用PHP技巧轻松完成(php捕获mysql异常)
- PHP array_unshift():在数组开头插入元素
- 数据PHP/MySQL实现数据查询与显示(phpmysql显示)
- PHP搭建Redis环境指南(php配置redis)
- 步骤步步骤前行:安装PHP与MySQL(php与mysql安装)
- Linux下的PHP编程之旅(linux的php)
- 库学会使用PHP操作MSSQL类库,輕鬆完成高效工作(php操作mssql类)
- PHP使用Redis扩展连接Redis服务(php开启redis)
- 利用PHP操作Redis变得更简单(php中redis的使用)
- 教你如何用 PHP 创建 MySQL 数据表(php创建mysql表)
- 仅用PHP操作MSSQL,实现快速下载!(php mssql下载)
- 推荐几本不可错过的 Linux PHP 书籍(linuxphp书籍)
- 解决MySQL与PHP配置问题的实战技巧(mysql php 配置)
- Redis实现PHP限流策略(redis限流php)
- PHP常用代码
- 需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
- php设计模式Builder(建造者模式)
- PHP字符串函数系列之nl2br(),在字符串中的每个新行(n)之前插入HTML换行符br
- PHP提取字符串中的图片地址[正则表达式]
- php学习之function的用法
- php中3种方法统计字符串中每种字符的个数并排序
- 通过缓存数据库结果提高PHP性能的原理介绍
- php去除换行符的方法小结(PHP_EOL变量的使用)
- PHP和.net中des加解密的实现方法
- 关于js和php对url编码的处理方法