02
2013-01

PHP正则表达式替换函数preg_replace

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/php-preg-replace.html



除非注明,文章均为史亚永原创,欢迎转载!转载请注明本文地址,谢谢。

本文地址:http://www.shiyayong.cn/post/php-preg-replace.html

评论列表:

6  Kaedeen  2013-1-10 11:49:32 回复该留言  IP:60.208.111.201
学习之~

顺便点点A D 赞助楼主
  茶馆老板  2013-1-10 13:11:01 回复该留言  IP:124.205.133.34
多谢支持啦,这下有费用啦,嘿嘿
茶馆老板
Kaedeen
5  周家大少  2013-1-4 21:08:12 回复该留言  IP:27.45.32.160
反斜杠很多看得我眼花缭乱,看来我的正则没有学好
  茶馆老板  2013-1-4 21:15:18 回复该留言  IP:118.186.58.186
那些反斜杠有的是转义的,有的是匹配的,不同的反斜杠用途不一样的
茶馆老板
周家大少
4  聚划算竞拍助手  2013-1-3 21:53:49 回复该留言  IP:180.159.39.50
这个博客有点乱,换个好点的风格吧
  茶馆老板  2013-1-3 22:14:35 回复该留言  IP:114.112.45.186
换风格在网站差不多的时候吧,可以稍微做修改,但是大的修改在网站前期要不得的,否则会一败涂地的
茶馆老板
聚划算竞拍助手
3  花七七  2013-1-3 21:12:28 回复该留言  IP:221.5.86.18
囧~转的太多啦
花七七
2  好运鞋  2013-1-3 15:42:30 回复该留言  IP:123.133.244.140
虽然看不明白,还是仔细看了看,了解一下这个行业也好。
  茶馆老板  2013-1-3 16:02:54 回复该留言  IP:114.112.45.186
这是PHP中的正则匹配,很实用的
茶馆老板
好运鞋
1  夏日博客  2013-1-3 13:41:35 回复该留言  IP:124.205.129.39
PHP正则很重要。
  茶馆老板  2013-1-3 14:38:55 回复该留言  IP:114.112.45.186
是啊,前天一直在弄一个如何把url用正则匹配替换为空的呢,终于弄出来了
茶馆老板
夏日博客

发表评论:

(设置个性头像)

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

无觅相关文章插件,快速提升流量