文档章节

PHP正则表达式替换函数preg_replace

sharephper
 sharephper
发布于 2013/01/05 15:50
字数 1010
阅读 4030
收藏 0

preg_replace正则表达式替换函数对于我来说,现在非常喜欢它。不仅能准确、快速的处理字符串,还能让我从新审视正则表达式的重要性。正则表达式语言对于我来说,就像人类听不懂鸟语一样,想懂它却那么难以交流,看来是要好好的学习学习正则表达式语法啦。这里有30分钟正则表达式入门教程,多么想和他熟悉熟悉,懂他能给工作带来很大的方便,所以拿下正则表达式是迫在眉睫的事情。

preg_replace — 执行一个正则表达式的搜索和替换
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

说明:搜索subject中匹配pattern的部分, 以replacement进行替换。

preg_replace参数补充说明:

1、replacement 可以包含 \\n 形式或 $n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。

2、对替换模式在一个逆向引用后面紧接着一个数字时(如 \\11),不能使用 \\ 符号来表示逆向引用。因为这样将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。

3、上述参数除 limit 外都可以是一个数组。如果 pattern 和 replacement 都是数组,将以其键名在数组中出现的顺序来进行处理,这不一定和索引的数字顺序相同。如果使用索引来标识哪个 pattern 将被哪个 replacement 来替换,应该在调用 preg_replace() 之前用 ksort() 函数对数组进行排序。

下面列举一些preg_replace的例子:
echo preg_replace("/[0-9]/","",$str);//去掉所有数字  
echo preg_replace("/[a-z]/","",$str); //这样是去掉所有小写字母  
echo preg_replace("/[A-Z]/","",$str); //这样是去掉所有大写字母  
echo preg_replace("/[a-z,A-Z]/","",$str); //这样是去掉所有字母

注:开头结尾出现斜杠(/),是告诉解析器双斜杠里面的内容即为正则表达式,也是声明正则表达式的标志,就像声明PHP变量用$一样。一对中括号([ ])里的内容,即是要查找替换的内容。

网络茶馆向我提了一个正则表达式的问题,解决办法如下:

//需求:去掉[url][/url]之间内容
$content = "今天是2013年01月02号[url=http:/./tech.42xiu.com]复制链接[/url]是新年的第二天。";
echo preg_replace("/\[url.*\[\/url\]/", "", $content); //结果:今天是2013年01月02号是新年的第二天。

注:本例中左中括号和右中括号,是要匹配的一部分,所以需要反斜杠(\)来转义[和],(何为转义:失去它原来的意义,元素不在特殊)

preg_replace高深之处在于,可以解析自定义的html写法,举个例子:

$template = preg_replace("/[\n\r\t]*\{css\s+(.+?)\}[\n\r\t]*/ies", "\$this->cssTags('\\1')", $template);

$template = preg_replace("/[\n\r\t]*\{script\s+(.+?)\}[\n\r\t]*/ies", "\$this->scriptTags('\\1')", $template);

$template = preg_replace("/\{lang\s+(.+?)\}/ies", "\$this->languageVar('\\1')", $template);

//以上正则替换,都是为了解析html模版中出现的{css ****}、{script *****}、{lang ****}等语法,这样自己可以写一套模版引擎之类的,很好的做到html与脚本分离。

其实,最最最重要的,还是要学会如何使用正则表达式,只有熟练的使用正则表达式,这些像preg_replace的函数用起来才能游刃有余,你说呢?所以正则表达式对于程序员来说,是必经之路啊。

本文由PHP乐知博客提供 http://tech.42xiu.com

© 著作权归作者所有

sharephper
粉丝 1
博文 12
码字总数 10924
作品 0
天津
程序员
私信 提问
PHP中正则表达式回顾(1)

先复习一下php中常用的正则表达式常用函数。 1. pregmatch()和pregmatchall() int pragmatch($pattern,$subject,可选参数$matchs); 只进行一次匹配,返回值0或者1,即匹配到的次数,将匹配...

嗜学如命的小蚂蚁
2015/09/17
99
0
PHP 基础篇 - PHP 正则官方文档汇总

一、PCRE 正则语法 下面是 PHP 的 PCRE 正则语法(模式语法)相关文档,详情请查阅相关链接: 简介 分隔符 元字符 转义序列(反斜线) Unicode字符属性 锚 句点 字符类(方括号) 可选路径(|) 内...

天秤vs永恒
2018/02/06
22
0
php正则匹配重写html图片img路径

有时候,需要替换html内容中的图片img路径,可以考虑使用 PHP 正则表达式匹配并进行替换,效果不错。有需要的朋友,可以参考下。 1、正则写法: 2、替换操作 替换前: <img src="uploads/ima...

mysoftsky
2013/09/22
1K
0
在PHP中使用正则表达式进行查找替换

首先需要声明的是,其实我对正则的应用也不是特别地熟练,只不过是在工作中“被逼无奈”才一步步地对正则有了一些了解。随着对正则的了解越多,越来越发现正则表达式真的是一个很强有力的工具...

技术小胖子
2017/11/15
0
0
php正则表达式心得总结

一、php采用的是PCRE模式: http://php.net/manual/zh/book.pcre.php PCRE模式 二、常用函数 preg_replace 执行正则表达式替换 http://php.net/manual/zh/function.preg-replace.php preg_ma......

爬墙
2016/12/25
50
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 系列教程之声明式事务 Transactional

200119-SpringBoot 系列教程之声明式事务 Transactional 当我们希望一组操作,要么都成功,要么都失败时,往往会考虑利用事务来实现这一点;之前介绍的 db 操作,主要在于单表的 CURD,本文将...

小灰灰Blog
4分钟前
19
0
短视频与直播相融合,完善平台功能

直播经历了2016年的大爆之后,热度似乎在今年冷却下来,不可否认的是直播现在的确存在着内容同质化和变现难两大问题,于是在今年,越来越多直播软件中开始加入短视频功能。同时,以短视频快速...

图玩智能科技
14分钟前
39
0
神经元树突臂发现隐藏的计算能力

  大脑的信息处理能力通常被认为存在于数以万亿计的神经元连接中。但过去几十年,越来越多的研究转向了单个神经元, 这些神经元可能承担着比以往认为的更多的计算职责。   最新的证据来自...

水果黄瓜
18分钟前
85
0
nginx事件模块实现细节

在nginx事件模块结构体详解中,我们讲解nginx的事件模块的整体工作流程,并且着重讲解了组织事件模块的各个方法的作用,本文则主要围绕这整个流程,从源码的角度讲解nginx事件模块的实现细节...

爱宝贝丶
20分钟前
105
0
Redis-cluster

Redis集群 集群就是 很多服务器组成的一个网络指的是将多台服务器集中在一起,实现同一业务 集群的特性 可扩展性 动态添加服务器 高可用性 集群提供的从一个出错的服务实体恢复到另一个服务...

快乐搬砖
25分钟前
75
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部