php 正则中(?:http://)中?:表示什么意思呢?

看了帖子说是表示捕获:
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

阅读 3.9k
3 个回答

?:是正则表达式中通用的把,Perl,python,java,php等等都是表示不捕获,就是括号只是表示group,不capture。

这种基础问题你随便测试一下就知道了,如果你对正则表达式不是很了解可以看一下Perl的正则介绍perlregexp部分。如上所述,Perl的强大就是在于哈希和正则,其他语言多少是借鉴Perl的,尤其是和Perl很像的PHP。

<?php
$uri = 'http://tieba.baidu.com/p/3563342437';
preg_match("/(?:http:\/\/)([^\/]+)/", $uri, $matched);
var_dump($matched);

结果是

array(2) {
  [0]=>
  string(22) "http://tieba.baidu.com"
  [1]=>
  string(15) "tieba.baidu.com"
}

(?:)的部分并没有被捕获的,如果把?:去掉,结果是

array(3) {
  [0]=>
  string(22) "http://tieba.baidu.com"
  [1]=>
  string(7) "http://"
  [2]=>
  string(15) "tieba.baidu.com"
}

戒备capture了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题