php正则如何替换所有符合条件的字符串

发布时间:2024-05-02 点击:36
在php中可以使用“preg_replace”函数替换所有符号匹配条件的元素,其语法是【
preg_replace (正则表达式, 替换成, 字符串, 最大替换次数【默认-1,无数次】, 替换次数)】。
推荐:《php视频教程》
php preg_replace() 正则替换,与javascript 正则替换不同,php preg_replace() 默认就是替换所有符号匹配条件的元素
需要我们用程序处理的数据并不总是预先以数据库思维设计的,或者说是无法用数据库的结构去存储的。
比如模版引擎解析模版、垃圾敏感信息过滤等等。
一般这种情况,我们用正则按我们的规则去匹配preg_match、替换preg_replace。
但一般的应用中,无非是些数据库crud,正则摆弄的机会很少。
根据前面说的,两种场景:统计分析,用匹配;处理用替换。
php preg_replace() 正则替换,与javascript 正则替换不同,php preg_replace() 默认就是替换所有符号匹配条件的元素。
代码如下:
preg_replace (正则表达式, 替换成, 字符串, 最大替换次数【默认-1,无数次】, 替换次数)
大部分语言的正则表达式都是差不多的,不过也有细微的差异。
php 正则表达式定界符
大多数语言的正则表达式都是由“/”作为定界符的,而在php中,还可以使用“#”定界,如果字符串中包含大量“/”字符,在使用“/”定界的时候,就需要对这些“/”转义,而使用“#”就不需要转义,更简洁。
<?php$weigeti='w3cschool 在线教程的网址是 http://e.jb51.net/ ,你能把这个网址替换成正确的网址吗?';// 上面的要求就是把http://e.jb51.net/ 替换成 http://e.jb51.net/w3c/// . : - 都是正则符号,所以需要转义,而 / 是定界符,如果字符串中包含 / 定界符,就需要转义echo preg_replace('/http\\\\:\\\\/\\\\/www\\\\.jb51\\\\.net\\\\//','http://e.jb51.net/w3c/',$weigeti);// 在 #作为定界符,/ 就不再是定界符的含义,就不需要转义了。echo preg_replace('#http\\\\://www\\\\.jb51\\\\.net/#','http://e.jb51.net/w3c/',$weigeti);//上面两条输出结果都一样,【w3cschool 在线教程的网址是 http://e.jb51.net/w3c/ ,你能把这个网址替换成正确的网址吗?】?>php 正则中文和忽略大小写php preg_replace() 是区分大小写的,同时只能匹配ascii编码内的字符串,如果需要匹配不区分大小写和中文等字符需要添加相应的修饰符 i 或 u。
<?php$weigeti='w3cschool 在线教程网址:http://www.jb51.net/w3school/';echo preg_replace('/w3cschool/','w3c',$weigeti);//大小写不同,输出【w3c 在线教程网址:http://www.jb51.net/w3school/】echo preg_replace('/w3cschool/i','w3c',$weigeti);//忽略大小写,执行替换输出【w3c 在线教程网址:http://e.jb51.net/w3c/】echo preg_replace('/网址/u','',$weigeti);//强制 utf-8中文,执行替换,输出【w3cschool 在线教程:http://www.jb51.net/w3school/】?>php 正则表达式在遇到换行符时,会将换行符当做字符串中间一个普通字符。而通用符号.不能匹配\\\\n,所以遇到带有换行符的字符串正则会有很多要点。
<?php$weigeti="jb51.net\\\\nis\\\\nloving\\\\nyou"; // 想要把上面$weigeti 替换成jb51.net echo preg_replace('/^[a-z].*[a-z]$/','',$weigeti);// 这个正则表达式是,匹配只包含\\\\w的元素,$weigeti 是以v开头,符合[a-z],而且结尾是u,也符合[a-z]。.无法匹配\\\\n// 输出【jb51.net is loveing you】 echo preg_replace('/^[a-z].*[a-z]$/s','',$weigeti);// 这个用修饰符s,也就是 . 可以匹配 \\\\n 了,所以整句匹配,输出空// 输出【】 echo preg_replace('/^[a-z].*[a-z]$/m','',$weigeti);// 这里使用了修饰符,将\\\\n作为多行独立匹配。也就等价于:/*$preg_m=preg_replace('/^[a-z].*[a-z]$/m','',$weigeti);$p='/^[a-z].*[a-z]$/';$a=preg_replace($p,'','jb51.net');$b=preg_replace($p,'','is');$c=preg_replace($p,'','loving');$d=preg_replace($p,'','you');$preg_m === $a.$b.$c.$d;*/// 输出【jb51.net】?>正则替换匹配变量向后引用
如果您熟悉javascript,一定对$1 $2 $3 …… 等向后引用比较熟悉,而在 php 中这些也可以被当作向后引用参数。而在php中,还可以使用 \\\\1 \\\\1 来表示向后引用。
向后引用的概念就是匹配一个大片段,这个正则表达式内部又被用括号切割成若干小匹配元素,那么每个匹配元素就被按照小括号序列用向后引用代替。
<?php$weigeti='w3cschool 在线教程网址:http://www.jb51.net ,你jbzj!了吗?'; echo preg_replace('/. (http\\\\:[\\\\w\\\\-\\\\/\\\\.] \\\\/)[^\\\\w\\\\-\\\\!] ([\\\\w\\\\-\\\\!] ). /','$1',$weigeti);echo preg_replace('/. (http\\\\:[\\\\w\\\\-\\\\/\\\\.] \\\\/)[^\\\\w\\\\-\\\\!] ([\\\\w\\\\-\\\\!] ). /','\\\\1',$weigeti);echo preg_replace('/. (http\\\\:[\\\\w\\\\-\\\\/\\\\.] \\\\/)[^\\\\w\\\\-\\\\!] ([\\\\w\\\\-\\\\!] ). /','\\\\\\\\1',$weigeti);// 上面三个都是输出 【http://www.jb51.net】 echo preg_replace('/^(. )网址:(http\\\\:[\\\\w\\\\-\\\\/\\\\.] \\\\/)[^\\\\w\\\\-\\\\!] ([\\\\w\\\\-\\\\!] ). $/','栏目:$1<br>网址:$2<br>商标:$3',$weigeti);/*栏目:w3cschool 在线教程网址:http://www.jb51.net商标:jbzj!*/ // 括号中括号,外面括号先计数echo preg_replace('/^((. )网址:(http\\\\:[\\\\w\\\\-\\\\/\\\\.] \\\\/)[^\\\\w\\\\-\\\\!] ([\\\\w\\\\-\\\\!] ). )$/','原文:$1<br>栏目:$2<br>网址:$3<br>商标:$4',$weigeti);/*原文:w3cschool 在线教程网址:http://www.jb51.net ,你jbzj!了吗?栏目:w3cschool 在线教程网址:http://www.jb51.net商标:jbzj!*/?>


收到类似黑客邮件-企业邮局
“冰墩墩”、“雪容融”商标和域名遭抢注
电商平台开发 北京流程是怎样的?电商平台开发方案是怎样的?
U盘插入电脑杀毒后文件不见了怎么恢复
哪个公司建设网站?网站由哪些部分组成?
哪个网站的.com域名优惠力度大?域名如何买最划算?
域名服务器作用与缺点各有哪些
字节跳动提前收购域名feiyue.com,新音乐产品正在测试