本文将介绍Perl正则表达式常用的函数,介绍函数常用的语法实例。
首先来看,对文本的处理方式:匹配,查找,分隔,替换。字符串函数和正则表达式,都可以处理,那他们分别有什么区别哪?
1、主要区别在于,字符串处理函数,只可准对性的处理,而正则表达式则可以处理一个模式
2、字符串处理函数,处理快,但是不一定能实现想要的功能。
3、正则表达式函数,功能强大,但是效率较低。
注意:如果字符串处理函数 和 正则 都可以实现需求功能,优先选取字符串处理函数。
下面我们将分别介绍字符串的 匹配、查找、分隔、替换函数。
匹配查找
字符串匹配函数
strstr,strpos,substr等
正则匹配
preg_match,prge_match_all,preg_grep
preg_match,preg_match_all,preg_grep
preg_match("/reg/",string,$arr);//reg:正则表达式;string:字符串;$arr:匹配结果(匹配详情)
preg_match_all("/reg/",string,$arr);//规则同上,但是此函数可以返回所有匹配结果,preg_match 匹配的是第一处
preg_gerp("/reg/",$array);//reg:正则, $array:字符串数组
例如:
$arr = array("abcd1","hello2","world","nihao")
$content = preg_grep("/\d/",$arr);
// preg_prep 可以匹配字符串数组
分隔
同样的道理,字符串分隔只能按固定的值分隔,而正则分隔则可以按照一种模式进行分隔。
explode(separator,$str,num);//separator 分隔符,要分割的字符串,返回数组元素的数目
// 若未找到,则不分割
实例:
<?php
$str = "php";
$reg = "//";
$arr = preg_split($reg,$str,-1,PREG_SPLIT_NO_EMPTY);//-1表示不限制个数,后面参数表示去除空。
$result = implode("-",$str);// 将数组中的每一项拼接,结果为: l-a-m-p
list($a,$b)= explode("-","soufun_ask");//字符串分隔,分别放到list中
echo $a;//soufun
echo $b;//ask
替换
字符串:
str_replace(mix $search,mix $replace,mix $subject,[int &count])
// search : 搜索的内容,可为数组["正常","PHP","微信"];
// replace: 要替换的内容["不正常","JAVA","QQ"];可以针对性的替换,不正常代替正常,JAVA 代替PHP,QQ代替微信。
//subject :源内容,源字符串
//count :替换的次数
正则表达式:
实例① 以下是一个实例,将链接进行替换成a标签
<?php
$str = "百度的连接是http://www.baidu.com,CSDN的连接是http://www.csdn.net,搜房问答的连接是http://www.fang.com/ask";
$reg = "/http:\/\/(www)\.(.*?)\.(com|net)(\/.*)?/";
if (preg_match_all($reg,$str,$arr)){
echo "匹配成功</br>";
echo "<pre>";
var_dump($arr);
echo "</pre>";
}
$newStr = preg_replace($reg,"<a href='$0'>\\1.\\2.\\3\\4</a>",$str);
echo "</br>{$newStr}";
实例②:代码与以上一样,讲讲模式修正符 e
$newStr = preg_replace($reg,"<a href='$0'>"."strtoUpper(\\1.\\2.\\3\\4)."</a>",$str);
//比如我想讲替换的链接转成 大写 之后显示
//此时若想 执行替换字符中的函数,就需要在 正则之后加上模式修正符 e
$reg = "/http:\/\(www)\.(.*?)\.(com|net|cn)/e";//便可匹配之后执行函数
其他替换函数
preg_replace_callback($reg,"myfun",$text);//myfun: 回调函数,执行完匹配之后调用回调方法。
preg_quote();// 转义特殊字符:$reg = "/".preg_quote("*is*")."/";// 转义之后: \*is\*