当前位置: 首页 > 后端技术 > PHP

php–正则表达式

时间:2023-03-29 18:53:09 PHP

在线正则表达式检测工具链接到正则表达式语法参考。除换行符\.外的所有字符。转义字符(否则为\*、\(、\\等)^字符串开头$字符串结尾\d、\w、\s数字、字符[A-Za-z0-9_]、空格。\D,\W,\S非数字、非字符[A-Za-z0-9_]、非空格。[abc]a、b或c之一。[a-z]从a到z的字母。[^abc]除a、b或c之外的字符。aa|bbaa或bb。?0或1匹配。*任意数量的匹配。+一个或多个匹配。{n}n完全匹配。{n,}n或更多matches.{m,n}最小m和最大n匹配。??,*?,+?,{n}?,etc.同上,但匹配的次数越少越好。(expr)捕获expr子模式,使用itwith\1等(?:expr)Ignorecapturesubpattern.(?=expr)Positivepreviewmodeexpr.(?!expr)Negativepreviewmodeexpr.php正则函数介绍与区别preg_match&preg_match_all//执行正则表达式匹配preg_match(string$pattern,strng$subject[,array$matches])//执行一次全局正则表达式匹配preg_match_all(string$pattern,string$subject[,array$matches])preg_match()返回$pattern匹配次数0或1,因为搜索会匹配完第一个就停止,preg_match_all()会一直搜索$subject直到结束4)Array([0]=>Array([0]=>4[1]=>3[2]=>9[3]=>2[4]=>4))preg_fiflter&preg_replace//只返回正则匹配的结果,'a','2','b','3','A','B','4');$pattern=array('/\d/','/[a-z]/','/[1a]/');$replace=array('A:$0','B:$0','C:$0');echo"preg_filter返回\n";print_r(preg_filter($pattern,$replace,$subject));echo"preg_replacereturns\n";print_r(preg_replace($pattern,$replace,$subject));//结果:preg_filterreturnsArray([0]=>A:C:1[1]=>B:C:a[2]=>A:2[3]=>B:b[4]=>A:3[7]=>A:4)preg_replace返回数组([0]=>A:C:1[1]=>B:C:a[2]=>A:2[3]=>B:b[4]=>A:3[5]=>A[6]=>B[7]=>A:4)其他正则函数介绍preg_quote(string$pattern)—对正则表达式字符进行转义,有时匹配字符中包含正则表达式语法,需要进行转义以匹配正则表达式特殊字符是:。+*?[^]$(){}=!<>|:-preg_split(string$pattern,string$subject)—通过正则表达式拆分字符串,类似于explode函数preg_grep—返回匹配模式的数组条目$array=array("23.32","22","12.009",“23.43.43”);print_r(preg_grep("/^(\d+)?\.\d+$/",$array));//result:Array([0]=>23.32[2]=>12.009)preg_replace_callback—执行正则表达式搜索并用回调替换<?php//将文本中的年份增加一年。$text="Aprilfoolsdayis04/01/2002\n";$text.="LastChristmaswas12/24/2001\n";//回调函数next_year($matches){//通常:$matches[0]是完成的匹配//$matches[1]是第一个捕获的子组的匹配//依此类推return$matches[1].($matches[2]+1);}echopreg_replace_callback("|(\d{2}/\d{2}/)(\d{4})|","next_year",$text);?>//result愚人节是04/01/2003去年圣诞节是12/24/2002