Apache RewriteCond和朋友中的正则表达式模式:全部或部分匹配?

leo*_*loy 9 regex apache mod-rewrite

Apache文档说明了这一点

CondPattern是条件模式,一个正则表达式,应用于TestString的当前实例[...] CondPattern是一个perl兼容的正则表达式,带有一些附加功能[...]

并给出了这样的例子

RewriteCond %{REMOTE_HOST}  ^host1.*  [OR]
Run Code Online (Sandbox Code Playgroud)

我知道Perl正则表达式,但这似乎让我感到困惑:

我们在这里讲的部分匹配吗?(模式匹配字符串中的一些子字符串,如Perl $string =~ m/pattern/;?)

或者它是完全匹配?(模式匹配整个字符串,如在Java中Pattern.matches(pattern, string)?)

如果匹配是部分的,则尾随.*似乎是多余的.它已经满了,那^就是多余的东西.

我发现的许多例子,在Apache文档和各处都有这个(对我来说很明显)不一致.

更新:这是文档的问题,现在已经更正了.

rid*_*ner 8

偏袒.(.*在示例中是多余的.)

Apache使用了优秀的PCRE库(虽然是旧版本 - 上次我检查的Rev:5.0 2004),由Phillip Hazel编写,非常像Perl.但我同意,他们的许多例子在正则表达式精度方面都有很多不足之处.

有一些特定于Apache的扩展,例如添加一个导致!模式应用NOT逻辑到匹配.我发现的最好的文档(你可能已经看过),就是这个页面:Apache Module mod_rewrite


小智 8

谢谢.我已经删除了我认为你在文档中提到的正则表达式中不必要的.*.如果你找到其他人,请告诉我,我也会解决这些问题.

默认情况下,正则表达式是子串匹配,并且不需要匹配整个字符串(通常).Apache文档中隐含其他内容的地方是错误,需要修复.

当人们完全没有必要时,人们往往会将.*放入正则表达式中.