欧卡2中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

需要三步,才能开始

只需两步,慢速开始

查看: 8221|回复: 0
收起左侧

[编程] preg_replace中的ies修饰符

[复制链接]
知行 发表于 2013-7-15 21:22 | 显示全部楼层 |阅读模式
post=pregreplace("/\[html\](.+?)\[\/html\]/eis","htmlcode(1)",post);
修饰符:
在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着"e"并不等于"E")。正则表达式里面的修饰符如下:
i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。
m:默认的正则开始"^"和结束"""m"""""。
s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。
E:与"m"相反,如果使用这个修饰符,那么""将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。 
U:和问号的作用差不多,用于设置"贪婪模式"。  
?表单非贪婪匹配,即尽可能少的匹配 
############# 
##总结模型### 
############# 
1.直接在preg_replace第2个变量执行的模式: 
echo preg_replace("/test/e",
h,"jutst test");
?>
提交http://127.0.0.1/test/11/preg.php?h=phpinfo()
实例如:phpbb的viewtopic.php变量highlihtmatchphp2.[]3phpechopregreplace("/\s\[php\](.+?)\[\/php\]\s/ies","",h);
?>
提交:http://127.0.0.1/test/11/preg.php?h=[php]phpinfo()[/php]
preg_replace与ereg_replace那个效率更高
  编程序,总有一种感觉,去年的程,到了今年,总感觉慢了好多,应该这就是优化所在,自己的知识更深,技术也在更,所以每过一段时间,再读读您写的程序,看有没有可以优化的地,这是一个程序员应该做的行动。preg_replace()是Perl内置的一种文字匹配模式,不过用起来一些参数会比ereg_relace()复杂一些,实际的项目运用中,用ereg的人还是不,近日我写了一个获取HTML中的文本的函数,发现preg_replace()居然比ereg_replace()快了近一倍,两个函数如下:
用preg_replace()
引用代码:function GetHtmlText(str)  
{  
$str = preg_replace("/<sty(.*)\/style>|<scr(.*)\/script>|<!--(.*)-->/isU","",$str);  
$alltext = "";  
$start = 1;  
for($i=0;$i<strlen($str);$i++){  
    if($start==0 && $str[$i]==">") $start = 1;  
    else if($start==1){  
    if($str[$i]=="<"){ $start = 0; $alltext .= " "; }  
    else if(ord($str[$i])>32) $alltext .= $str[$i];  
    }  
}  
$alltext = preg_replace("/&([^;&]*)(;|&)/"," ",$alltext);  
$alltext = preg_replace("/ {1,}/"," ",$alltext);  
$alltext = preg_replace("/ {1,}/"," ",$alltext);  
return $alltext;  

用ereg_replace() 
引用代码:function GetHtmlText(
str)
{
str=eregireplace("<sty(.)/style>|<scr(.)/script>|<!(.)>","",str);
alltext="";start = 1;
for(i=0;i<strlen(str);i++){
    if(start==0 &&str[i]==">")start = 1;
    else if(start==1){  
    if($str[$i]=="<"){ $start = 0; $alltext .= " "; }  
    else if(ord($str[$i])>32) $alltext .= $str[$i];  
    }  
}
alltext = ereg_replace("&([^;&]*)(;|&)"," ",alltext);alltext = ereg_replace(" {1,}"," ",alltext);alltext = ereg_replace(" {1,}"," ",alltext);returnalltext;
}

  经过多次测试对,用preg_replace()的函数普遍在 0.08-0.12秒之间,用ereg_replace()的函数却去到0.35-0.38秒之间,测试的网页为百度的主页,我的系统是图拉丁 1.1G的CP,384M的内存。
  如果你的程序中还有使用ereg处理较长文本的,建议马上更改过来。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服QQ936487697|联系我们|手机版|欧卡2中国 ( 湘ICP备11020288号-1 )

GMT+8, 2025-5-17 06:40 , Processed in 0.099599 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表