关于正则表达式分组的一个问题
发布时间:2020-12-14 01:29:04 所属栏目:百科 来源:网络整理
导读:先来看一段php代码: ?php$pattern = '/(d+.?)+/'; //regular expression$string = '192.168.210';if (preg_match_all($pattern,$string,$arr)){ echo 'Matching wellbr /'; echo 'pre'; print_r($arr); echo '/pre';}else{ echo 'font color="red"Matchin
先来看一段php代码: <?php $pattern = '/(d+.?)+/'; //regular expression $string = '192.168.210'; if (preg_match_all($pattern,$string,$arr)) { echo 'Matching well<br />'; echo '<pre>'; print_r($arr); echo '</pre>'; } else { echo '<font color="red">Matching failure.</font><br />'; } ?>显示结果:
因为表达式(d+.?)+存在量词+,整个正则的匹配是一次性的。在整个正则表达式的匹配过程中,括号内的d+.?会多次匹配:第一次匹配192.,第二次匹配168.,第三次(也就是最后)匹配210,最终这个捕获分组匹配的文本就是210,最后的捕获分组中匹配的文本就是210。 当把(d+.?)+的量词+去掉后,得到的是:
当调用preg_match_all()后,分重复三次不同的匹配,第一次是匹配字符串192.168.210,第二次匹配168.210,最后是210。那么最后捕获分组$arr中会有三个分组匹配值192.和168.和210。捕获分组的个数是不能动态变化的,单个正则表达式里有多少个捕获分组,一次匹配成功之后,结果中就必然存在多少个对应的元素(匹配的文本)。 参考余晟 的 《正则指引》 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |