POSIX和PCRE这些术语是什么可以其余探求干系资料理解。

https://www.php.cn/php-weizijiaocheng-339810.html

https://blog.csdn.net/garcon1986/article/details/5937333

eregiphpPHP入门念书笔记十二正则表达式函数 Docker

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,TM3、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()函数利用方法相同。

三、一星期小结

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