加括号和不加括号的匹配结果为什么会不一样
$pattern='/([\w\-]+@[\w]+\.\w+)/'; //加括号和不加括号的匹配结果为什么会不一样
preg_match($pattern,$subject,$str);
print_r($str);
输出为:
array
(
[0] => spark@imooc.com
[1] => spark@imooc.com
)
$pattern='/([\w\-]+@[\w]+\.\w+)/'; //加括号和不加括号的匹配结果为什么会不一样
preg_match($pattern,$subject,$str);
print_r($str);
输出为:
array
(
[0] => spark@imooc.com
[1] => spark@imooc.com
)
2016-02-05
(子组的开始标记
)子组的结束标记
子组通过圆括号分隔界定,并且它们可以嵌套。 将一个模式中的一部分标记为子组(子模式)主要是来做两件事情:
(1) 将可选分支局部化。比如,模式cat(arcat|erpillar|)匹配 ”cat”, “cataract”, “caterpillar” 中的一个,如果没有圆括号的话,它匹配的则是 ”cataract”, “erpillar” 以及空字符串。
(2) 将子组设定为捕获子组(向上面定义的). 当整个模式匹配后, 目标字符串中匹配子组的部分将会通过 pcre_exec()()的 ovector 参数回传给调用者。 左括号从左至右出现的次序就是对应子组的下标(从 1 开始), 可以通过这些下标数字来获取捕获子模式匹配结果。
输出应该为:
array
(
[0] => spark@imooc.com
)
如果你加了圆括号,则第一次匹配为整体匹配,第二次匹配为该子组的匹配。
所以输出应该为:
array
(
[0] => spark@imooc.com
[1] => spark@imooc.com
)
举报