当前位置: 首页 > 编程日记 > 正文

php正则表达式函数 preg_replace用法



preg_replace

(PHP 3>= 3.0.9, PHP 4 )

preg_replace -- 执行正则表达式的搜索和替换

说明

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

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

对替换模式在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的 \\1 符号来表示逆向引用。举例说 \\11,将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。本例中的解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。

例子 1. 逆向引用后面紧接着数字的用法

<?php
$string 
= "April 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";
$replacement = "\${1}1,\$3";
print 
preg_replace($pattern, $replacement, $string);

/* Output
   ======

April1,2003

*/
?>

如果搜索到匹配项,则会返回被替换后的 subject,否则返回原来不变的 subject

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

例子 2. 在 preg_replace() 中使用索引数组

<?php
$string 
= "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";

$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";

print 
preg_replace($patterns, $replacements, $string);

/* Output
   ======

The bear black slow jumped over the lazy dog.

*/

/* By ksorting patterns and replacements,
   we should get what we wanted. */

ksort($patterns);
ksort($replacements);

print 
preg_replace($patterns, $replacements, $string);

/* Output
   ======

The slow black bear jumped over the lazy dog.

*/

?>

如果 subject 是个数组,则会对 subject 中的每个项目执行搜索和替换,并返回一个数组。

如果 pattern  replacement 都是数组,则 preg_replace() 会依次从中分别取出值来对 subject 进行搜索和替换。如果 replacement 中的值比 pattern 中的少,则用空字符串作为余下的替换值。如果 pattern 是数组而replacement 是字符串,则对 pattern 中的每个值都用此字符串作为替换值。反过来则没有意义了。

/e 修正符使 preg_replace()  replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

例子 3. 替换数个值

<?php
$patterns 
= array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/",
                   
"/^\s*{(\w+)}\s*=/");
$replace = array ("\\3/\\4/\\1\\2", "$\\1 =");
print 
preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");
?>

本例将输出:

$startDate = 5/27/1999

例子 4. 使用 /e 修正符

<?php
preg_replace 
("/(<\/?)(\w+)([^>]*>)/e",
              
"'\\1'.strtoupper('\\2').'\\3'",
              
$html_body);
?>

这将使输入字符串中的所有 HTML 标记变成大写。

例子 5. 将 HTML 转换成文本

<?php
// $document 应包含一个 HTML 文档。
// 本例将去掉 HTML 标记,javascript 代码
// 和空白字符。还会将一些通用的
// HTML 实体转换成相应的文本。

$search = array ("'<script[^>]*?>.*?</script>'si",  // 去掉 javascript
                 
"'<[\/\!]*?[^<>]*?>'si",           // 去掉 HTML 标记
                 
"'([\r\n])[\s]+'",                 // 去掉空白字符
                 
"'&(quot|#34);'i",                 // 替换 HTML 实体
                 
"'&(amp|#38);'i",
                 
"'&(lt|#60);'i",
                 
"'&(gt|#62);'i",
                 
"'&(nbsp|#160);'i",
                 
"'&(iexcl|#161);'i",
                 
"'&(cent|#162);'i",
                 
"'&(pound|#163);'i",
                 
"'&(copy|#169);'i",
                 
"'&#(\d+);'e");                    // 作为 PHP 代码运行

$replace = array ("",
                  
"",
                  
"\\1",
                  
"\"",
                  
"&",
                  
"<",
                  
">",
                  
" ",
                  
chr(161),
                  
chr(162),
                  
chr(163),
                  
chr(169),
                  
"chr(\\1)");

$text = preg_replace ($search, $replace, $document);
?>

注: limit 参数是 PHP 4.0.1pl2 之后加入的。

参见 preg_match()preg_match_all()  preg_split()

相关文章:

面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!

最近几年&#xff0c;Python莫名火了起来&#xff0c;很多公司都想赶上这“莫名”的热潮&#xff0c;招聘到大牛人才。但是&#xff0c;最近一个HR在社交网站的吐槽又火了&#xff1a;那么问题来了&#xff0c;市面上为什么鲜有企业满意的优秀的Python程序员&#xff1f;企业到…

Spring源码分析【5】-Spring MVC处理流程

org.apache.catalina.core.ApplicationFilterChain.doFilter 获取Filter org.apache.catalina.core.ApplicationFilterChain.internalDoFilter org.springframework.web.filter.DelegatingFilterProxy.doFilter invokeDelegate org.springframework.security.web.FilterCha…

Mysql——外键

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;外键 外键&#xff1a;foreign key&#xff0c;&#xff08;外边的键&#xff0c;键不在本表中&#xff09;&#xff1a;如果一张表中有一个字段&#xff08;非主键&#xff09;指向另一张表的主键&#x…

揭开「拓扑排序」的神秘面纱

作者 | 小齐本齐责编 | Carol来源 | 码农田小齐Topological sort 又称 Topological order&#xff0c;这个名字有点迷惑性&#xff0c;因为拓扑排序并不是一个纯粹的排序算法&#xff0c;它只是针对某一类图&#xff0c;找到一个可以执行的线性顺序。这个算法听起来高大上&…

Spring源码分析【6】-ThreadLocal的使用和源码分析

Spring代码使用到了ThreadLocal java.lang.ThreadLocal.set getMap java.lang.Thread.threadLocals定义 回到set 如果map为null 则createMap

《软件的破解》

本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的&#xff0c;根据我自己的学习经历&#xff0c;如果你直接照着很多破解教程去学习的话&#xff0c;多半都会把自己搞得满头的雾水&#xff0c;因为有很多的概念要么自己不是很清楚&#xff0c;…

php级别鉴定

一、PHP初级程序员薪资水平&#xff1a;4000.00--8000.00&#xff08;RMB/月&#xff09;~HTML设计与应用~DIVCSS~PHP基础~MySQL基础~PHP高级~CMS系统二、PHP中级程序员 薪资水平&#xff1a;8000.00--12000.00&#xff08;RMB/月&#xff09;~PHP面向对象~MySQL高级~Smarty模板…

Spring源码分析【7】-Spring 模板页和JSP文件的编译

org.apache.jasper.servlet.JspServletWrapper.service org.apache.jasper.JspCompilationContext.compile org.apache.jasper.JspCompilationContext.createCompiler org.apache.jasper.compiler.Compiler.isOutDated 判断文件是否存在 ..\Apache\apache-tomcat-8.0.36\w…

Distinction Between Strategy and Decorator

首先看Strategy和Decorator在GoF的《Design Patterns》的intent Decorator (1)intent: Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality. (2)UML Diagram: Strategy (1)i…

我竟然混进了Python高级圈子!

现如今&#xff0c;计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章&#xff0c;还是要参与相关任务&#xff0c;你马上就会遇到一些拦路虎&#xff1a;想过滤垃圾邮件&#xff0c;不具备概率论中的贝叶斯思维恐怕不行&#xff1b;想试…

unity3d中旋转

自转是Rotate&#xff0c;绕转是RotateAround&#xff0c;LookAt旋转物体自身&#xff0c;使其正面朝向目标点以上操作都在transform中完成转载于:https://blog.51cto.com/568464209/1764050

Java常用方法

1. 把Strings转换成int和把int转换成StringString a String.valueOf(2); //integer to numeric string int i Integer.parseInt(a); //numeric string to an int String a String.valueOf(2); //integer to numeric stringint i Integer.parseInt(a); //numeric string …

request.getSession(false)到底返回什么

HttpSession session request.getSession(false); 很明显传false如果session不存在返回Null。

洞察疫情,微软推出新冠数据分析网站COVID Insights

来源 | 微软研究院AI头条COVID Insights 网站功能亮点持续数月的新冠疫情一路肆虐、席卷全球&#xff0c;世界各地的科研人员都在为此奋战&#xff0c;希望通过最先进的技术逐步揭开新冠病毒的神秘面纱。近日&#xff0c;微软亚洲研究院的研究人员基于在计算生物学、数据分析等…

LINUX 查找tomcat日志关键词

#查询catalina.out日志文件中的关键词为2016-04-13 11:26:00的日志信息grep -C 10 2016-04-13 11:26:00 catalina.out |more解释&#xff1a;grep &#xff1a;查询&#xff0c;筛选-C &#xff1a; grep的-A, -B, -C选项分别可以显示匹配行的后,前,后前多少行内容:10 &#xf…

转帖 javascript事件监听

原帖地址&#xff1a; http://www.cnblogs.com/AganCN/archive/2008/05/24/1206272.html 考虑这样的情形在IE浏览中处理&#xff0c;需要响应页面的按钮点击事件&#xff0c;有哪些方法呢&#xff1f;&#xff08;1&#xff09;onclick属性添加事件处理函数 <javascript>…

推荐系统发展的六大影响因子 | 深度

作者丨gongyouliu来源 | 大数据与人工智能&#xff08;ID: ai-big-data&#xff09;随着科学技术的进步&#xff0c;移动互联网快速发展&#xff0c;手机越来越便宜&#xff0c;拥有智能手机不再是一件遥不可及的事情&#xff0c;互联网用户规模已接近增长的顶点。摄像头和信息…

Spring源码分析【9】-SpringSecurity密码Remove原理

很明显代码已经说了认证完成移除credentials和其他某些安全数据 // Authentication is complete. Remove credentials and other secret data // from authentication org.springframework.security.authentication.ProviderManager.authenticate package org.springframewo…

Linux --进程间通信--共享内存

一、共享内存共享内存是最高效的通信方式&#xff0c;因为不需要一个进程先拷贝到内核&#xff0c;另一个进程在存内核中读取。二、 ipcs -m 查看共享内存ipcrm -m 删除共享内存三、主要函数shmget 创建shmctl 删除shmat 挂接shmdt 取消挂接********* man 函数名 查看*****四、…

如何用 Slack 和 Kubernetes 构建一个聊天机器人?| 附代码

作者 | Alexander Kainz译者 | 天道酬勤&#xff0c;责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;ChatOps可以让你使用基于聊天的接口来管理DevOps任务。本文主要让我们了解如何使用Slack构建一个简单的机器人来控制Kubernetes集群。最后我们可以使用…

在jsp调试后端绑定对象

在jsp调试后端绑定对象&#xff0c;这个调用层次非常深

一行代码轻松实现拖动效果

写JS实现拖动需要一大堆不便维护的代码&#xff0c;实属麻烦&#xff0c;Google了大半天&#xff0c;发现了一个优秀的Jquery插件EasyDrag&#xff0c;只需要一行代码便可轻松在主流浏览器上 实现拖动效果. $(document).ready( function() { $("#divPanel"…

Spring源码分析【8】-分布式环境SpringSecurity保持用户会话

1.SpringSecurity的权限控制流程是这样的&#xff1a;用户登录&#xff0c;基础信息UserInfo存在SpringSecurity的ThreadLocal里。 下面是contextHolder对象&#xff1a; final class ThreadLocalSecurityContextHolderStrategy implementsSecurityContextHolderStrategy {// ~…

【Android游戏开发之七】(游戏开发中需要的样式)再次剖析游戏开发中对SurfaceView中添加组件方案!...

本站文章均为 李华明Himi 原创,转载务必在明显处注明&#xff1a; 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/308.html 各位童鞋请你们注意&#xff1a;surfaceview中确实有 onDraw这个方法&#xff0c;但是surfaceview不会自己去调用&#x…

“华为云杯”2020深圳开放数据应用创新大赛线上推介会成功举办,让深圳大数据在全球“跑”起来...

4月30日下午&#xff0c;“华为云杯”2020深圳开放数据应用创新大赛第三场线上推介会完美落幕。至此&#xff0c;从4月23日开始的三场云端推介会全部结束&#xff0c;全球各数字平台总观看量1000多万人次。深圳市政务服务数据管理局副局长王耀文、深圳市南山区副区长练聪、南山…

学习OpenCV——配置CUDA环境

大家都把GPU&CUDA说的很NB狠NB&#xff0c;于是&#xff0c;下一步想通过GPU加速程序运行。这一个星期&#xff0c;都在配置OpenCV的CUDA环境&#xff0c;今天终于以失败告终&#xff0c;原因是实验室的机器显卡不支持CUDA。。。伤不起啊&#xff0c;一星期啊&#xff01;&…

NLP带来的“科幻感”超乎你的想象 - ACL2020论文解读

来源 | 京东智联云开发者责编 | Carol近些年&#xff0c;人工智能无疑是信息技术领域最热门的技术之一。人工智能战胜世界围棋冠军、人工智能战胜游戏高手、人工智能医生看病会诊……不断进步的科技正推动着人工智能从一个无法实现的幻想&#xff0c;不断突破人类的想象&#x…

Vsftp 安装配置(转)

转:http://www.cnblogs.com/qingfeng2010/archive/2010/12/26/1917121.html 1.查看是否安装vsftprpm –qa|grep vsftpd 如果出现 vsftpd-2.0.5-16.el5_5.1 说明已经安装 vsftp 安装vsftp yum -y installvsftpd 2.测试 是否安装成功 &#xff08;ip 改成自己啊&#xff0c…

事务隔离机制原理分析以及是否可以防止订单超卖

事务的隔离机制是指&#xff1a; Read Uncommitted&#xff08;读取未提交内容&#xff09; Read Committed&#xff08;读取提交内容&#xff09; Repeatable Read&#xff08;可重读&#xff09; Serializable&#xff08;可串行化&#xff09; 具体的解释最经典的MySQL书《…

PHP中file_exists与is_file,is_dir的区别介绍

PHP中file_exists与is_file,is_dir的区别介绍作者&#xff1a; 字体&#xff1a;[增加 减小] 类型&#xff1a;转载 时间&#xff1a;2012-09-12 我要评论很显然file_exists是受了asp的影响&#xff0c;因为asp不但有fileExists还有folderExists,driverExists&#xff0c;那么P…