为了账号安全,请及时绑定邮箱和手机立即绑定

加括号和不加括号的匹配结果为什么会不一样

$pattern='/([\w\-]+@[\w]+\.\w+)/';  //加括号和不加括号的匹配结果为什么会不一样

preg_match($pattern,$subject,$str);

print_r($str);

输出为:

array

(

[0] => spark@imooc.com

[1] => spark@imooc.com

)

正在回答

2 回答

  1. (子组的开始标记

    )子组的结束标记

  2. 子组通过圆括号分隔界定,并且它们可以嵌套。 将一个模式中的一部分标记为子组(子模式)主要是来做两件事情:

    (1) 将可选分支局部化。比如,模式cat(arcat|erpillar|)匹配 ”cat”, “cataract”, “caterpillar” 中的一个,如果没有圆括号的话,它匹配的则是 ”cataract”, “erpillar” 以及空字符串。

    (2) 将子组设定为捕获子组(向上面定义的). 当整个模式匹配后, 目标字符串中匹配子组的部分将会通过 pcre_exec()()的 ovector 参数回传给调用者。 左括号从左至右出现的次序就是对应子组的下标(从 1 开始), 可以通过这些下标数字来获取捕获子模式匹配结果。

  3. 比如,如果字符串 ”the red king” 使用模式((red|white) (king|queen)) 进行匹配, 模式匹配到的结果是 array(“red king”, ”red king”, “red”, “king”) 的形式, 其中第 0 个元素是整个模式匹配的结果,后面的三个元素依次为三个子组匹配的结果。 它们的下表分别为 1, 2, 3。

3. 也就是说,如果你不加圆括号,则只进行一次匹配,也就是整体匹配。

输出应该为:

array

(

[0] => spark@imooc.com

)

如果你加了圆括号,则第一次匹配为整体匹配,第二次匹配为该子组的匹配。

所以输出应该为:

array

(

[0] => spark@imooc.com

[1] => spark@imooc.com

)


1 回复 有任何疑惑可以回复我~

谢谢您的解答

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

加括号和不加括号的匹配结果为什么会不一样

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信