这是什么意思?

时间:2011-01-26 14:10:03

标签: regex

在Apache配置文件中,有一行可以避免对图像进行gzip压缩:

SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

我认为不存在.gif文件名,如myfile.*:gif

那么?:是什么意思?

1 个答案:

答案 0 :(得分:10)

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

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

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

如果你想匹配一堆图像的文件名,机器人不能捕获超过文件名的内容,这会很有用:

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

将文件与此正则表达式匹配时,只会捕获文件名。文件扩展名不会是因为它不在捕获组中。