在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
正则表达式是在日常开发中经常用到的,通常一些使用频率过高的正则表达式都是直接粘贴复制,对于基础正则的使用还是要铭记于心的,今天抽时间整理一些php正则表达式的用法。 一、php中常用的正则表达式函数 preg_match() 与 preg_match_all() 1、preg_match ( $pattern, $subject, [ array &$matchs ] ); //执行匹配正则表达式 2、preg_match_all ( $pattern, $subject, array &$matches ); //执行一个全局正则表达式匹配 返回结果:匹配到结果的次数; 参数说明: pattern 要搜索的模式,字符串类型 subject 输入字符串 matches 对于第一个函数,如果提供了参数matches,它将被填充为搜索结果。$matches[0]将包含完整模式匹配到的文本,$matches[1] 将包含捕获子组匹配到的文本。 对于第二个函数,matches是必填项,它是一个多维数组,作为输出参数输出所有匹配结果, 数组排序通过 一个简单的demo来查看区别: $pattern = '/[0-9]/'; $subject = 'afdddd3asfs4asf6asf1'; $m1= $m2 = []; preg_match($pattern, $subject, $m1); preg_match_all($pattern, $subject, $m2); show($m1); echo '<hr>'; show($m2); 结果: Array ( [0] => 3 ) ---------------------- Array ( [0] => Array ( [0] => 3 [1] => 4 [2] => 6 [3] => 1 ) ) preg_replace 与 preg_filter 3、preg_replace ( $pattern, $replacement, $subject ) //执行一个正则表达式的搜索和替换 4、preg_filter ( $pattern, $replacement, $subject ) //执行一个正则表达式搜索和替换 参数说明: pattern 要搜索的模式。可以使一个字符串或者字符串数组。可以使用PCRE修饰符 replacement 用于替换的字符串或者字符串数组。 subject 要进行搜索和替换的字符串或字符串数组。 区别:preg_filter 它仅仅返回(可能经过转化)与目标匹配的结果,功能和preg_replace类似 返回值:如果 如果没有找到匹配或者发生了错误,当 分别用3个简单的demo来查看区别: 测试1: $pattern = '/[0-9]/'; $subject = 'afdddd3asfs4asf6asf1'; $replacement = 'CHINA'; $str1 = preg_replace($pattern, $replacement, $subject); $str2 = preg_filter($pattern, $replacement, $subject); show($str1); echo '<hr>'; show($str2); 结果1: afddddCHINAasfsCHINAasfCHINAasfCHINA preg_replace 和 preg_filter都支持数组替换的,继续看区别 测试2: //$pattern = '/[0-9]/'; $pattern = [ '/[123]/', '/[4567]/', '/[890]/']; $subject = 'afdddd3asfs4asf9asf1'; //$replacement = 'CHINA'; $replacement = ['你', '好', '吗']; $str1 = preg_replace($pattern, $replacement, $subject); $str2 = preg_filter($pattern, $replacement, $subject); show($str1); echo '<hr>'; show($str2); 结果2: afdddd你asfs好asf吗asf你 ------------------------------ afdddd你asfs好asf吗asf你 貌似还是没有区别和变化,继续测试 测试3: //$pattern = '/[0-9]/'; $pattern = [ '/[123]/', '/[4567]/', '/[890]/']; //$subject = 'afdddd3asfs4asf9asf1'; $subject = ['afddd', 'd3asf', 's4', 'as', '9as', 'f1']; //$replacement = 'CHINA'; $replacement = ['你', '好', '吗']; $str1 = preg_replace($pattern, $replacement, $subject); $str2 = preg_filter($pattern, $replacement, $subject); show($str1); echo '<hr>'; show($str2); 结果3: Array ( [0] => afddd [1] => d你asf [2] => s好 [3] => as [4] => 吗as [5] => f你 ) -------------------- Array ( [1] => d你asf [2] => s好 [4] => 吗as [5] => f你 ) 由此可见,preg_replace 替换会把每一个数组中的元素都进行一次匹配替换,无论有没有匹配成功,返回值中的元素都会保留,而preg_filter 只会保留匹配成功的元素; 5、preg_grep ( $pattern, array $input ) // 返回匹配模式的数组条目 只做匹配,不做替换,是preg_filter的简版; 参数说明: pattern 要搜索的模式,字符串形式 input 输入数组 通过demo查看效果: $pattern = '/[0-9]/'; $subject = ['afddd', 'd3asf', 's4', 'as', '9as', 'f1']; $str1 = preg_grep($pattern, $subject); show($str1); 结果: Array ( [1] => d3asf [2] => s4 [4] => 9as [5] => f1 ) 由此可见,preg_grep针对 subject 中的每一个元素都进行了匹配,且结果只会打印匹配到的数据; 6、preg_split ( $pattern, $subject ) // 通过一个正则表达式分隔字符串 说明:通过正则表达式匹配字符串,将字符串按正则拆分成数组,如果你不需要正则表达式功能,可以有更快(并且更简单)的选择比如 explode() 或 str_split()。如果没有成功匹配,将会返回一个数组,包含了单个元素,即输入的字符串。 参数说明: pattern 用搜索的模式,字符串形式。 subject 输入字符串 通过demo查看效果: $pattern = '/[0-9]/'; $subject = '我在3上海5,你知道2的吗?'; $str1 = preg_split($pattern, $subject); show($str1); 结果: Array ( [0] => 我在 [1] => 上海 [2] => ,你知道 [3] => 的吗? ) 由此可见,通过正则表达式,凡是遇到0-9之间的阿拉伯数字都会切一刀拆分成数组; 7、preg_quote($str) //转义正则表达式字符 说明:preg_quote()需要参数 正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - 注意 / 不是正则表达式特殊字符 用demo示例效果: $str = 'this is {abc} and [456]'; $str = preg_quote($str); show($str); 结果: this is \{abc\} and \[456\] 由此可见,{} 花括号和 [] 方括号都是正则表达式的特殊符号,通过preg_quote 函数进行转译后多了\,因此进行正则匹配的时候会忽略该特殊符号; 二、正则表达式常用总结 1、都以preg_ 开头 2、除 preg_quote 函数之外,第一个参数都是正则表达式 3、preg_match -------表单验证等 4、preg_replace -----非法词语过滤等
注:学习笔记
|
2022-08-17
2022-11-06
2022-08-18
2022-07-18
2022-07-18
请发表评论