该函数可以执行正则表达式的搜索和替换,是一个最强大的字符串替换处理函数,该函数会有三个参数,subject中搜索第一个参数pattern模式的匹配项,并替换为第二个参数,如果指定了第四个可选参数limit,则仅替换limit个匹配,如果省略limit或者其值为-1,则所有的匹配都会被替换

$pattern = "/]*?/";

$text = "这个文本中有加粗都有下划线以及斜体还有带有颜色和字体大小的标记";

echo preg_replace($pattern,'',$text);

echo "
";

echo preg_replace($pattern,''$text,2);

?>

上例是preg_replace()函数最简单的用法,只是将文本$text中根据$pattern模式搜索到的html标签全部替换为空,即删除所有HTML标记,也可以通过第四个参数传入一个整数,用来指定替换的次数。

使用preg_replace()函数时,最常见的形式就是可以包含反向引用,即使用\\n的形式依次引用正则表达式中的模式单元,每个此种引用将被替换为与第n个被捕获的括号内的子模式所匹配的文本,n可以从0到99,其中\\0指的是被整个模式所匹配的文本,对左圆括号从左到右计算以取得子模式的数目,对替换模式在一个逆向引用后面紧接着一个数字时,不能使用熟悉的\\1符号来表示逆向引用,举例说明\\1,将会使preg_replace()搞不清楚是想要一个\\1的逆向引用后面跟着一个数字1还是一个\\1的逆向引用,本例解决的方法是使用\${1}1,这会形成一个隔离的$1逆向引用,而使另一个1只是单纯的文字

$pattern = "/(\d{2})\/(\d{2})\/(\d{4})/";

$text = "今年春节放假日期为01/25/2009到02/02/2009共7天";

echo preg_replace($pattern,"\\3-\\1-\\2",$text);

echo preg_replace($pattern,"\$(3)-\$(1)-\$(2)");

?>

该程序的输出结果为

今年春节放假日期为2009-01-25到2009-02-02共7天

今年春节放假日期为2009-01-25到2009-02-02共7天

在使用preg_replace()函数时,有一个专门为它提供的模式修饰符"e",也只有preg_replace()函数使用此修饰符,如果设定了此修饰符,函数preg_replace()在替换字符串中对逆向引用做正常的替换,将其作为PHP代码求值,并用其结果来替换搜索的字符串,要确保第二个参数构成一个合法的PHP代码字符串,否则PHP会在报告在包含preg_replace()的行中出现语法解析错误

$pattern = "/(]*>)/e";

$text = "这个文本中有加粗都有下划线以及斜体还有带有颜色和字体大小的标记";

echo preg_replace($pattern,"'\\1'.strtoupper('\\2').'\\3'",$text);//将所有HTML标签小写改成大写

?>

在上例中声明正则表达式时,使用了模式修正符"e",所以函数preg_replace()中第二个参数的字符串将作为PHP代码求值

在使用preg_replace()函数时,其前三个参数均可使用数组,如果第三个参数是一个数组,则会对它中的每个元素都执行搜索和替换,并返回替换后的一个数组,如果第一个参数和第二个参数都是数组,则会依次从中分别取出对应的值来对第三个参数中的文本进行搜索和替换,如果第二个参数中的值比第一个参数中少,则用空字符串作为余下的替换值。如果第一个参数是数组而第二个参数是字符串,则对第一个参数中的每个值都用此字符串作为替换值,反过来则没有意义。

php中的preg_replace函数,PHP函数preg_replace()相关推荐

  1. 注意到函数preg_replace_callback和preg_replace

    前言 先知论坛上今早看到这样一篇文章,Discuz!因Memcached未授权访问导致的RCE,仔细阅读了下,核心点感觉还是一个对preg_replace_callback和preg_replace的 ...

  2. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  3. mysql 字段加减_MySQL中你必须了解的函数

    在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重.小编刚开始学习的时候也会有这个感觉.不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个.今天小编就把常 ...

  4. WinCE中串口驱动及接口函数介绍(转载)

    作者:ARM-WinCE 在WinCE中,串口驱动实际上就是一个流设备驱动,具体架构如图: 串口驱动本身分为MDD层和PDD层.MDD层对上层的Device Manager提供了标准的流设备驱动接口( ...

  5. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  6. Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序

    最近在做一个电子档案管理的项目.现在还处于初期,只是做一个简单demo拿去跟客户演示.至于最后谈不谈得下来,到底做不做,反正我是不看好,但没因为这样就马马虎虎.草草了事.这个项目算是b/s加c/s混合 ...

  7. R语言笔记6:在R中写一些简单的函数、functions基础和作用域

    R语言基础系列: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4向量.矩阵的数学运算 5控制结构 Your first R ...

  8. pandas将列表list插入到dataframe的单元格中、pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)

    pandas将列表list插入到dataframe的单元格中.pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes) 目录

  9. R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置、str_locate_all函数定位所有位置

    R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置.str_locate_all函数定位所有位置 目 ...

  10. pandas使用replace函数替换dataframe中的值:replace函数对dataframe中的多个值进行替换、即一次性同时对多个值进行替换操作

    pandas使用replace函数替换dataframe中的值:replace函数对dataframe中的多个值进行替换.即一次性同时对多个值进行替换操作 目录

最新文章

  1. C与指针、C陷阱与缺陷
  2. Linux使用Jexus托管Asp.Net Core应用程序
  3. 使用未初始化的内存是什么意思_他们都说JVM能实际使用的内存比-Xmx指定的少?这是为什么呢...
  4. 编程中、遇到问题、bug多思考
  5. 记录蚂蚁笔记服务端的搭建过程
  6. 使用 jszip 实现.zip文件解压后上传
  7. [速记] 网络安全复习——选择题汇总
  8. Cisco CCNP课程
  9. 支付宝支付加密规则梳理,写的太好了!
  10. 如何用安装启动盘启动计算机,用u盘启动电脑进入系统安装 如何进入启动u盘安装系统...
  11. vue中xlsx导出多个sheet页
  12. 嵌入式设备的JTAG,Angle,和ICE三种调试笔记
  13. 5-TAMRA标记LYS赖氨酸,5-TAMRA-Lysine结构式及光谱图分享
  14. 学习HTTP协议——《图解HTTP》
  15. Java | 参数(Parameter)
  16. 【Flask】篇一:Error: Failed to find Flask application or factory in module “学习用“. Use “FLASK_APP=学习用:nam
  17. Android打印机--小票打印格式及模板设置
  18. opencv两视频合并
  19. Elasticsearch常用基本语法
  20. 华为 vlan 端口隔离

热门文章

  1. android处理服务器的集合,android集合SSH搭建服务器客户端请求
  2. OS / 进程中某个线程崩溃,是否会对其他线程造成影响?
  3. ubuntu MySQL Oracle_Oracle 与 MySql 区别
  4. clientdataset 遍历字段_TClientDataSet[5]: 读取数据
  5. 弹框位置设置html,JQuery弹出框定位实现方法
  6. vivado2017.4启动时提示的“error when launching'E:\vivado':Launcher time out”的问题
  7. class unity 定义类_Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性...
  8. android nfc peer to peer 实例,NFC Peer2Peer Mode - Android Beam - ISO 18092
  9. mysql window怎么安装补丁_window下mysql安装步骤
  10. 学习总结:CSS(一)定义方式、选择器、选择器权重