猿问

php 正则 (?: pattern) 作用是什么

$rule1="/(?:\w+)/";
$rule2="/(\w+)/";
preg_match($rule1,'Hi',$matches);
preg_match($rule2,'Hi',$matches2);

//打印 存入$matches和$matches2中的匹配项。
print_r($matches);
print_r($matches2);

测试后,$rule1,若匹配,则捕获整体,不会捕获子组
    $rule2,若匹配,则捕获整体,并捕获子组
        
问题:既然不捕获子组,那么直接不用括号就可以,例如:‘/\w+/’
      '/(?: \w+)/'是不是显得有点多余?
   (?: pattern) 一般用在什么情况下?


王亚松
浏览 1873回答 1
1回答

习惯受伤

(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
随时随地看视频慕课网APP
我要回答