声明:$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
- //preg_match ,preg_match_all
- $pattern = '/[0-9]/';
- $subject = 'weuyr3ui76as83s0ck9';
- $m1 = $m2 = array();
- preg_match($pattern,$subject,$m1);
- preg_match_all($pattern,$subject,$m2);
- show($m1);
- echo '<hr>';
- show($m2);
- function show($var = null){
- if(empty($var)){
- echo 'null';
- }
- else if(is_array($var)||is_object($var)){
- //array,object
- echo '<pre>';
- print_r($var);
- echo '</pre>';
- }
- else{
- //string ,int ,float...
- echo $var;
- }
- }
- ?>
上述代码就是在字符串weuyr3ui76as83s0ck9中找到数字。
2.preg_replace()与preg_filter()
preg_replace($pattern,$replacemenrt,$subject)
preg_filter($pattern,$replacement,$subject)
下面我们来举个栗子:
- <?php
- //preg_filter() preg_replace()
- $pattern = '/[0-9]/';
- $subject ='weuyr3ui76as83s0ck9';
- $replacement = '球宝宝';
- $str1 = preg_replace($pattern,$replacement,$subject);
- $str2 = preg_filter($pattern,$replacement,$subject);
- show($str1);
- echo '<hr>';
- show($str2);
- function show($var = null){
- if(empty($var)){
- echo 'null';
- }
- else if(is_array($var)||is_object($var)){
- //array,object
- echo '<pre>';
- print_r($var);
- echo '</pre>';
- }
- else{
- //string ,int ,float...
- echo $var;
- }
- }
- ?>
只需要:$pattern = array('/[0-3]/
','[4-6]','[7-9]');
$replacement = array('球','宝','宝');
这个意思就是当匹配到0-3中的某一个数字时,就用“球”来替代;匹配到4-6中的某一个数字时,就用“宝”来替代;匹配到7-9中的某一个数字时,用“宝”来替代。
比如:
- <?php
- //preg_filter() preg_replace()
- //$pattern = '/[0-9]/'
- $pattern = array('/[0-3]/','/[4-6]/','/[7-9]/');
- $subject ='weuyr3ui76as83s0ck9';
- //$replacement = '球宝宝';
- $replacement = array('球','宝','宝');
- $str1 = preg_replace($pattern,$replacement,$subject);
- $str2 = preg_filter($pattern,$replacement,$subject);
- show($str1);
- echo '<hr>';
- show($str2);
- function show($var = null){
- if(empty($var)){
- echo 'null';
- }
- else if(is_array($var)||is_object($var)){
- //array,object
- echo '<pre>';
- print_r($var);
- echo '</pre>';
- }
- else{
- //string ,int ,float...
- echo $var;
- }
- }
- ?>
既然上面两个例子中,preg_filter()和preg_replacement()的结果都一样,那么他们到底有什么区别呢?
当我们把$subject = array('weuy','r3ui','76as83','s','0ck9'
);加上之后,就会显示出他俩的差别:
- <?php
- //preg_filter() preg_replace()
- //$pattern = '/[0-9]/'
- $pattern = array('/[0-3]/','/[4-6]/','/[7-9]/');
- //$subject ='weuyr3ui76as83s0ck9';
- $subject = array('weuy','r3ui','76as83','s','0ck9');
- //$replacement = '球宝宝';
- $replacement = array('球','宝','宝');
- $str1 = preg_replace($pattern,$replacement,$subject);
- $str2 = preg_filter($pattern,$replacement,$subject);
- show($str1);
- echo '<hr>';
- show($str2);
- function show($var = null){
- if(empty($var)){
- echo 'null';
- }
- else if(is_array($var)||is_object($var)){
- //array,object
- echo '<pre>';
- print_r($var);
- echo '</pre>';
- }
- else{
- //string ,int ,float...
- echo $var;
- }
- }
- ?>
从上边可以看出来:
preg_replacement()函数,无论有没有替换的字都会显示出来,但是preg_filter()函数如果没有出现替换的字是不会显示出来的。