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

在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!
*/
?>

更多关于云服务器域名注册虚拟主机的问题,请访问西部数码官网:www.west.cn

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » php正则如何替换所有符合条件的字符串

登录

找回密码

注册