您的位置 首页 php

PHP入门读书笔记(十二):正则表达式函数

php中有实现POSIX风格正则表达式函数,也有实现PCRE风格的正则表达式函数。PCRE函数要略优于POSIX函数。

POSIX和PCRE这些术语是什么可以另外寻找相关资料了解。

这些资料仅供参考

一、POSIX风格的正则表达式函数

POSIX风格这些函数已经在最新版PHP中已经移除了。

1、ereg()函数和eregi()函数

 函数格式:
bool ereg(string pattern,string string,[array regs]);
bool eregi(string pattern,string string,[array regs]);  

在字符串string 中匹配表达式pattern,如果匹配成功返回true,否则返回false。如果有第三个参数regs,则将成功匹配的字串按照子串(子表达式)划分,并存储到regs数组中。ereg区分大小写,而eregi不区分大小写。

 <?php
    $reg = '^[$][[:alpha:]_][[:alpha:]]*';
    ereg($reg,'$_name',$register);
var_dump($register);
?>
运行结果:
array(1) { [0]=> string(6) "$_name" }  

2、ereg_replace()函数和eregi_replace()函数

 函数格式:
string ereg_replace(string pattern,string replacement,string string);
string eregi_replace(string pattern,string replacement,string string);  

在字符串string 中匹配表达式pattern,如果匹配成功,则使用replacement来替换匹配字串,并返回替换后的string。如果未在string中找到匹配项,则string 原样返回。eregi_replace()不区分大小写。

 <?php
   $reg = 'tm';
   $str = 'hello,tm.Tm,tM,';
   $reg_str = ereg_replace($reg,'TM',$str);
   echo  $reg_str;
?>
运行结果:
hello,TM.TM,TM  

3、split()函数和spliti()函数

 函数格式:
array split(string pattern,string string,[int limit]);
array spliti(string pattern,string string,[int limit]);  

使用表达式pattern来分割字符串string。如果有参数limit,那么数组最多有limit个元素,剩余部分都写到最后一个数组元素。如果函数错误,则返回false。Split()函数区分大小写,spliti()函数不区分大小写

 <?php
      $reg = 'is';
   $str = 'this is a register book';
   $arr_str = spliti($reg,$str);
   var_dump($arr_str);
?>
运行结果:
array(4) { [0]=> string(2) "th" [1]=> string(1) " " [2]=> string(6) " a reg" [3]=> string(8) "ter book" }  

二、PCRE风格的正则表达式函数

4、preg_grep()函数

 函数格式:array preg_grep(string pattern,array input);  

使用数组input中的元素一一匹配表达式pattern,最后返回由所有相匹配的元素组成所组成的数组。

 <?php
 $reg = '/\d{3,4}-?\d{7,8}/';
   $arr = array('0432112345678','0431-7654321','12345678');
   $arr_str = preg_grep($reg,$arr);
   var_dump($arr_str);
?>
运行结果:
array(2){ [0]=>string(12)"0432112345678" [1]=> string(12) "0431-7654321" }  }  

5、preg_match()函数和preg_match_all()函数

 函数格式:
int preg_match(string pattern,string subject,[array matches]);
int preg_match_all(string pattern,string subject,[array matches]);  

在字符串subject中匹配表达式pattern。函数返回匹配的次数。如果有数组matches,那么每次匹配的结果都将被存储到数组matches中。

函数preg_match()的返回值是0或者1。因为该函数在匹配成功后就停止继续查找了,而preg_match_all()函数则会一直匹配到最后才会停止,所以参数array_matches对于preg_match_all()函数是必须有的,对preg_match()函数则可以省略。

 <?php
   $reg = '/\b\w{2}\b/';
   $str = "this is an example";
   $num1 = preg_match($reg,$str,$str1);
   echo $num1.'<br/>';
   var_dump($str1);
   $num2 = preg_match_all($reg,$str,$str2);
   echo '<p>'.$num2.'<br/>';
   var_dump($str2);
?>
运行结果:
  1
array(1) { [0]=> string(2) "is" }
2
array(1) { [0]=> array(2) { [0]=> string(2) "is" [1]=> string(2) "an" } }  

6、preg_quote()函数

 函数格式:string preg_quote(string str,[string delimiter]);  

该函数将字符串str中所有特殊字符进行自动转义,如果有参数delimiter,那么该参数所包含的字串也将被转义。函数返回转义后的字串。

这里说的特殊字符是指正则表达式中具有一定意义的元字符。其他如:“@”,“#”等则不会被当做特殊字符处理。

 <?php
$str = '!、$、^、*、+、.、[、]、\\、/、b、<、>';
   $str2 ='b';
   $match_str = preg_quote($str,$str2);
   echo $match_str;
?>
运行结果:
\!、\$、\^、\*、\+、\.、\[、\]、\\、/、\b、\<、\>  

7、preg_replace()函数

 函数格式:mixed preg_replace(mixed pattern,mixed replacement,mixed subject,[int limit]);  

该函数在字符串subject中匹配表达式pattern,并将匹配项替换成字串replacement。如果有参数limit,则替换limit次。

如果参数中调用的是数组,有可能在调用过程中并不是按照数组的key值进行替换,所以在调用之前需要使用ksoft()函数将数组重新排列。

 <?php
$str = '[b]粗体字[/b]';
$b_str = preg_replace('/\[b\](.*)\[\/b\]/i','<b>$1</b>',$str);
echo $b_str;
?>
运行结果:
粗体字 //加粗的。  

这个例子的字串“$1”是在正则表达式外调用分组,按照$1,$2排列,依次表示从左到右的分组顺序,也就是括号顺序。$0表示的是整个正则表达式的匹配值。

8、preg_replace_callback()函数

 函数格式:
mixed preg_replace_callback(mixed pattern,callback callback,mixed subject,[int limit]);  

preg_replace_callback()函数和preg_replace()函数的功能相同,都是用于查找和替换字串。不同的是preg_replace_callback()函数使用一个回调函数来(callback)代替replacement参数。

注意:在preg_replace_callback回调函数中,字符串使用”,这样可以保证字符串中的特殊符号不被转义。

 <?php
function go_back($str){
$str = "<font color=$str[1]>$str[2]</font>";
return $str;
}
$str = '[color=blue]字体颜色[/color]';
echo preg_replace_callback('/\[color=(.*)\](.*)\[\/color\]/U',"go_back",$str);
?>
运行结果:
字体颜色 //蓝色的  

9、preg_split()函数

 函数格式:array preg_split(string pattern,string subject,[int limit]);  

使用表达式pattern来分割字符串subject。如果有参数limit,那么数组最多有limit个元素。该函数与split()函数使用方法相同。

三、一星期小结

这一星期我们学习了条件控制语句,循环控制语句,字符串的介绍和操作函数,正则表达式语法规则和操作函数。学习一下子变得有点难起来了,需要我们去动手敲代码验证了。也只有这样才能巩固知识点。

文章来源:智云一二三科技

文章标题:PHP入门读书笔记(十二):正则表达式函数

文章地址:https://www.zhihuclub.com/76589.shtml

关于作者: 智云科技

热门文章

网站地图