有人可以向我解释这个正则表达式吗?

时间:2014-05-28 00:43:26

标签: regex .htaccess rewrite

我只是想更好地理解这个正则表达式:

 RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})

我理解重写和_REQUEST。我只是想更好地理解正则表达式。

由此,我假设%符号前面的反斜杠意味着它将允许%。是否也允许使用管道和支架?

允许百分号的目的是什么?这不就是用十六进制字符打开攻击的可能性吗?

2 个答案:

答案 0 :(得分:2)

括号中的部分说:

等号左方括号百分号,后跟0到2次的任何数字或大写字母。

我不知道它的目的是什么。

答案 1 :(得分:1)

在最高级别,正则表达式可以分为3个部分,以“|”分隔字符,表示逻辑OR。 第1部分:= 第2部分:\[ 第3部分:\%[0-9A-Z]{0,2}

与这些子表达式中的任何一个匹配的字符串将匹配整个表达式。

第1部分仅表示字符串是否由一个字符组成,即等号:=

第2部分表示该字符串由一个字符组成,该字符是左括号字符:[。反斜杠用于转义左方括号字符,它在正则表达式中具有特殊含义(参见第3部分)

第3部分由两部分组成。首先,\%表示对于与此表达式匹配的字符串,它必须以百分比'%'字符开头。反斜杠是为了逃避它,因为它在正则表达式中也有特殊含义。下一个句段[0-9A-Z]表示后面的字符可以由0到9之间的字符或A-Z之间的字符组成。任何一个都应该工作正常。最后一个段{0,2}修改了上一个段,并表示可以接受前一个段中指定的0到2个字符。因此以下所有字符串都匹配第3部分:

%
%A
%B
%0
%3
%AF
%1G
%8M

以下字符串与第3部分不匹配:

'' (the empty string)
1A (doesn't start with %)
%3f (lowercase f is not allowed)
%F5A (3 characters following the percent sign)

我发现使用在线工具帮助构建/解密正则表达式很有帮助,例如:http://rubular.com/

相关问题