任意字符匹配问题
\w匹配字母数组下划线\W匹配非字母数字下划线,用模式单元分组成为一个原子组,匹配一个任意字符 用*量词来修饰,匹配字符串的所有字符 , 可是为什么最后会匹配一个.字符呐
$pattern = '/(\w|\W)*/'; $string = "jkrghd gxvxc12 32."; $result = preg_match($pattern,$string,$match); var_dump($match); //array(2) { // [0]=> // string(20) "jkrghd //gxvxc12 //32." // [1]=> // string(1) "." //}
正在回答
你好,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,并不代表匹配字符串的所有字符,\w和\W匹配的字符是互补的,\w:用于匹配字母,数字或下划线字符;\W:用于匹配所有与\w不匹配的字符,那么\w|\W能匹配到所有的字符,包括你字符串里的换行和‘.’,preg_match,正常情况下,其第三个参数$match的第一个元素$match[0]包含完整模式匹配到的所有文本,第二个元素$match[1]包含第一个捕获子组匹配到的文本,依次类推,如
$pattern = '/(abcd)*./';
$string = "abcdhaha";
$result = preg_match($pattern,$string,$matches);
print_r($matches);
//匹配结果
Array
(
[0] => abcdh
[1] => abcd
)
'/(\w|\W)*/'属于极端情况,无乱字符串是什么样的,正则表达式能够完全匹配所有字符,同时所有字符都在第一个捕获的子组内,因此match数组第二个元素只为字符串中的最后一个字符,不管最后一个字符是不是'.',这种情况下第二个元素都只是最后一个字符。PHP的规则就是这样的。
如果解决了你的疑问,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 225 份
- 解答问题 3372 个
掌握用PHP开发互联网网站的必备功能,掌握当下主流的Linux系统开发,并熟练使用热门框架ThinkPhp开发电商团购项目,是通向PHP工程师必经之路。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星