前一段时间,我在正则表达式中(至少在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 上搜索。
我也查看了许多正则表达式参考指南,但没有提到。
以 ?
为前缀,并出现在括号内的第一个字符会让我相信它与向前或向后查看有关。
那么,这些的正确名称是什么,我可以在哪里学到更多知识?
?:
(尽管它使正则表达式更加难以阅读) - DrColossos