PHP中常用的正则表达式函数

声明:$pattern=正则表达式,$subject=目标数据


1.preg_match()与preg_match_all()

preg_match($pattern,$subject,[array &$matches])
preg_match_all($pattern,$subject,array &$matches)

preg_match只会匹配一次,preg_match_all会把所有符合的字符串都匹配出来,并且放置到matches数组中,而且这两个函数都有一个整形的返回值。
return 匹配到结果的次数;
通过函数返回值我们也可以知道matches中的键值对的个数。

下面我们来举个栗子来体验一下:
[php]  view plain  copy
  1. <?php  
  2. //preg_match ,preg_match_all  
  3. $pattern = '/[0-9]/';  
  4. $subject = 'weuyr3ui76as83s0ck9';  
  5.   
  6. $m1 = $m2 = array();  
  7. preg_match($pattern,$subject,$m1);  
  8. preg_match_all($pattern,$subject,$m2);  
  9.   
  10. show($m1);  
  11. echo '<hr>';  
  12. show($m2);  
  13.   
  14. function show($var = null){  
  15.     if(empty($var)){  
  16.         echo 'null';  
  17.     }  
  18.     else if(is_array($var)||is_object($var)){  
  19.         //array,object  
  20.         echo '<pre>';  
  21.         print_r($var);  
  22.         echo '</pre>';  
  23.     }  
  24.     else{  
  25.         //string ,int ,float...  
  26.         echo $var;  
  27.     }  
  28. }  
  29. ?>  

上述代码就是在字符串weuyr3ui76as83s0ck9中找到数字。


2.preg_replace()与preg_filter()

preg_replace($pattern,$replacemenrt,$subject)
preg_filter($pattern,$replacement,$subject)

下面我们来举个栗子:
[php]  view plain  copy
  1. <?php  
  2. //preg_filter() preg_replace()  
  3. $pattern = '/[0-9]/';  
  4. $subject ='weuyr3ui76as83s0ck9';  
  5. $replacement = '球宝宝';  
  6.   
  7. $str1 = preg_replace($pattern,$replacement,$subject);  
  8. $str2 = preg_filter($pattern,$replacement,$subject);  
  9.   
  10. show($str1);  
  11. echo '<hr>';  
  12. show($str2);  
  13.   
  14. function show($var = null){  
  15.     if(empty($var)){  
  16.         echo 'null';  
  17.     }  
  18.     else if(is_array($var)||is_object($var)){  
  19.         //array,object  
  20.         echo '<pre>';  
  21.         print_r($var);  
  22.         echo '</pre>';  
  23.     }  
  24.     else{  
  25.         //string ,int ,float...  
  26.         echo $var;  
  27.     }  
  28. }  
  29. ?>  

在preg_replacement()中,不仅可以用字符串,也可以用数组。
只需要:$pattern = array('/[0-3]/ ','[4-6]','[7-9]');
$replacement = array('球','宝','宝');

这个意思就是当匹配到0-3中的某一个数字时,就用“球”来替代;匹配到4-6中的某一个数字时,就用“宝”来替代;匹配到7-9中的某一个数字时,用“宝”来替代。

比如:
[php]  view plain  copy
  1. <?php  
  2. //preg_filter() preg_replace()  
  3. //$pattern = '/[0-9]/'  
  4. $pattern = array('/[0-3]/','/[4-6]/','/[7-9]/');  
  5. $subject ='weuyr3ui76as83s0ck9';  
  6. //$replacement = '球宝宝';  
  7. $replacement = array('球','宝','宝');  
  8.   
  9. $str1 = preg_replace($pattern,$replacement,$subject);  
  10. $str2 = preg_filter($pattern,$replacement,$subject);  
  11.   
  12. show($str1);  
  13. echo '<hr>';  
  14. show($str2);  
  15.   
  16. function show($var = null){  
  17.     if(empty($var)){  
  18.         echo 'null';  
  19.     }  
  20.     else if(is_array($var)||is_object($var)){  
  21.         //array,object  
  22.         echo '<pre>';  
  23.         print_r($var);  
  24.         echo '</pre>';  
  25.     }  
  26.     else{  
  27.         //string ,int ,float...  
  28.         echo $var;  
  29.     }  
  30. }  
  31. ?>  


既然上面两个例子中,preg_filter()和preg_replacement()的结果都一样,那么他们到底有什么区别呢?

当我们把$subject = array('weuy','r3ui','76as83','s','0ck9' );加上之后,就会显示出他俩的差别:

[php]  view plain  copy
  1. <?php  
  2. //preg_filter() preg_replace()  
  3. //$pattern = '/[0-9]/'  
  4. $pattern = array('/[0-3]/','/[4-6]/','/[7-9]/');  
  5. //$subject ='weuyr3ui76as83s0ck9';  
  6. $subject = array('weuy','r3ui','76as83','s','0ck9');  
  7. //$replacement = '球宝宝';  
  8. $replacement = array('球','宝','宝');  
  9.   
  10. $str1 = preg_replace($pattern,$replacement,$subject);  
  11. $str2 = preg_filter($pattern,$replacement,$subject);  
  12.   
  13. show($str1);  
  14. echo '<hr>';  
  15. show($str2);  
  16.   
  17. function show($var = null){  
  18.     if(empty($var)){  
  19.         echo 'null';  
  20.     }  
  21.     else if(is_array($var)||is_object($var)){  
  22.         //array,object  
  23.         echo '<pre>';  
  24.         print_r($var);  
  25.         echo '</pre>';  
  26.     }  
  27.     else{  
  28.         //string ,int ,float...  
  29.         echo $var;  
  30.     }  
  31. }  
  32. ?>  


从上边可以看出来:
preg_replacement()函数,无论有没有替换的字都会显示出来,但是preg_filter()函数如果没有出现替换的字是不会显示出来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值