匹配规则的模式

Pattern for matching a rule

我已经尝试为rules.below的集合编写htaccess是我要匹配的规则模式

0x00|0x01|0x02|0x03|0x04|0x05|0x06|0x07|0x08|0x09|0x0A|0x0B|0x0C|
0x0D|0x0E|0x0F|0x10|0x11|0x12|0x13|0x14|0x15|0x16|0x17|0x18|0x19|
0x1A|0x1B|0x1C|0x1D|0x1E|0x1F|0x7F

我试过了 0x([01-09]|[0A-0F]|[10-19]|[1A-1F]|7F)

你误导了自己,因为作为一个人,你知道“01”、“02”等是一串数字。正则表达式不关心数字,他们关心字符[01-09] 不是“01 到 09”的意思,它的意思是“0;或 1 到 0;或 9”——这显然没有意义。

如果逐个字符分解,您有:

  • “0”
  • “x”
  • “0”或“1”(在正则表达式中,集合 [01]
  • “0”到“9”(字符范围[0-9]),或“A”到“F”([A-F]
  • 加上“0x7F”的特例

所以你可以写:

0x[01]([0-9]|[A-F])|0x7F

您可以将两个范围合二为一,给出:

0x[01][0-9A-F]|0x7F

共享 0x 实际上并没有使它更短:

0x([01][0-9A-F]|7F)

0x00|0x01|0x02|0x03|0x04|0x05|0x06|0x07|0x08|0x09|0x0A|0x0B|0x0C| 0x0D|0x0E|0x0F|0x10|0x11|0x12|0x13|0x14|0x15|0x16|0x17|0x18|0x19| 0x1A|0x1B|0x1C|0x1D|0x1E|0x1F|0x7F

这已经是正则表达式了。您可以完全按照所写的方式使用它(作为正则表达式的一部分)。

但可以简化为:

0x([01][0-9A-F]|7F)

您可能希望使用 (?i) 模式修饰符使此正则表达式 case-insensitive。例如:

(?i)0x([01][0-9A-F]|7F)

或者在 .htaccess.

中使用带有 mod_rewrite 指令的 NC (nocase) 标志

顺便说一句,这与 my answer 中使用的正则表达式基本相同,您之前的问题是:
Stop redirecting page if the url have control character