【发布时间】:2011-04-18 06:44:46
【问题描述】:
不久前,我在正则表达式中看到(至少在 PHP 中),您可以通过添加 ?: 来使捕获组不捕获。
示例
$str = 'big blue ball';
$regex = '/b(ig|all)/';
preg_match_all($regex, $str, $matches);
var_dump($matches);
输出...
array(2) {
[0]=>
array(2) {
[0]=>
string(3) "big"
[1]=>
string(4) "ball"
}
[1]=>
array(2) {
[0]=>
string(2) "ig"
[1]=>
string(3) "all"
}
}
在这个例子中,我不关心括号中匹配的内容,所以我附加了?: ('/b(?:ig|all)/') 并得到了输出
array(1) {
[0]=>
array(2) {
[0]=>
string(3) "big"
[1]=>
string(4) "ball"
}
}
这非常有用——至少我是这么认为的。有时您只是不想用不必要的值弄乱您的匹配项。
我试图查找文档和它的正式名称(我称它为非捕获组,但我想我以前听说过)。
作为符号,Google 似乎很难找到。
我还查看了许多正则表达式参考指南,但没有提及。
以? 为前缀,并出现在括号内的第一个字符中,这让我相信它与前瞻或后瞻有关。
那么,这些的正确名称是什么,我在哪里可以了解更多信息?
【问题讨论】:
-
+1 因为我不知道
?:(尽管它使 RegEx 更加不可读) -
干得好伙计们,每个人都从我这里得到一分