?: 的意思是什么?

3
在Apache配置文件中,有一行代码可以避免对图像进行gzip压缩:
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

我不相信会有一个名为myfile.*:gif.gif文件。

那么?:是什么意思?

1个回答

10

这个特定的部分 (?:gif|jpe?g|png) 几乎与 (gif|jpe?g|png) 完全相同。

区别在于,第一个不会“捕获”圆括号中的组。换句话说,在查看匹配项时,第一个示例中的内容将不作为特殊组包含进来。

通常,当您用圆括号括起项目时,它被称为“捕获组”。换句话说,在使用正则表达式与文本匹配的结果中查看时,括号中的内容将被放入一个“组”中以供稍后检查。当您使用(?:stuff)时,圆括号内的内容仍然在正则表达式中被分组,但它不被视为捕获组。

如果您想匹配一堆图像的文件名,但不想捕获除文件名以外的其他内容时,这可能会很有帮助:

"([^.]\.)(?:gif|png|tiff)"

当使用这个正则表达式匹配文件时,只有文件名会被捕获。文件扩展名不会被捕获,因为它不在一个捕获组内。


+1 我将删除我的回答,因为这个解释更好,只是添加链接,可能会有帮助...http://www.regular-expressions.info/brackets.html - Vojta
1
@Vojita,我建议你保留你的答案。拥有两个好答案不会有任何损失。 - jjnguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接