POSIX和PCRE这些术语是什么可以其余探求干系资料理解。
https://www.php.cn/php-weizijiaocheng-339810.html
https://blog.csdn.net/garcon1986/article/details/5937333
https://blog.csdn.net/MIGENGKING/article/details/95046154
这些资料仅供参考
一、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);?>运行结果: 1array(1) { [0]=> string(2) "is" }2array(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回调函数中,字符串利用”,这样可以担保字符串中的分外符号不被转义。
<?phpfunction 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()函数利用方法相同。
三、一星期小结
这一星期我们学习了条件掌握语句,循环掌握语句,字符串的先容和操作函数,正则表达式语法规则和操作函数。学习一下子变得有点难起来了,须要我们去动手敲代码验证了。也只有这样才能巩固知识点。