PHP正则表达式替换函数preg_replace

preg_replace正则表达式替换函数对于我来讲,如今很是喜欢它。不只能准确、快速的处理字符串,还能让我重新审视正则表达式的重要性。正则表达式语言对于我来讲,就像人类听不懂鸟语同样,想懂它却那么难以交流,看来是要好好的学习学习正则表达式语法啦。这里有30分钟正则表达式入门教程,多么想和他熟悉熟悉,懂他能给工做带来很大的方便,因此拿下正则表达式是迫在眉睫的事情。 css

preg_replace — 执行一个正则表达式的搜索和替换
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

说明:搜索subject中匹配pattern的部分, 以replacement进行替换。 html

preg_replace参数补充说明:

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

二、对替换模式在一个逆向引用后面紧接着一个数字时(如 \\11),不能使用 \\ 符号来表示逆向引用。由于这样将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 仍是一个 \\11 的逆向引用。解决方法是使用 \${1}1。这会造成一个隔离的 $1 逆向引用,而使另外一个 1 只是单纯的文字。 正则表达式

三、上述参数除 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写法,举个例子: this

$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的函数用起来才能游刃有余,你说呢?因此正则表达式对于程序员来讲,是必经之路啊。 url

本文由PHP乐知博客提供 http://tech.42xiu.com

相关文章
相关标签/搜索