【问题标题】:regular expression which start with "/start/" but does not end with "end1" or "end2"以“/start/”开头但不以“end1”或“end2”结尾的正则表达式
【发布时间】:2011-12-14 07:41:16
【问题描述】:

我试图制定一个正则表达式,以与 httpd.conf 文件中的 Apache Web 服务器配置的“位置”指令一起使用。

<Location ~ "/start/.*(?!end1|end2)$"> 
    Order Deny,Allow
    Deny from all
    Allow from foo.com
</Location> 

但是,我在 Apache 日志文件中收到以下错误:

Syntax error on line 1179 of c:/apache/apache/conf/httpd.conf:
Regex could not be compiled

我知道错误可能在“负前瞻”部分:(?!end1|end2),但无法准确确定。 谢谢

【问题讨论】:

  • 您使用的是哪个版本的 apache?正则表达式语法在 1.x 和 2.x 之间发生了巨大变化
  • 这是来自Oracle应用服务器10g的Apache,应该基于Apache 1.3。
  • 即使使用前瞻,表达式:/start/.*(?!end1|end2)$ 也不起作用。为确保该位置以/start/ 开头并且不以end1end2 结尾,这里有一个有效的表达式:^/start/(?!.*end[12]$)

标签: regex apache location httpd.conf


【解决方案1】:

Apache 1.x 使用 POSIX 扩展正则表达式和这些表达式

不支持

环视

所以你的问题就在这里:(?!end1|end2)

【讨论】:

  • 他正在寻找“以“end1”或“end2”结尾的字符串”
  • 感谢您的提示。我将对 POSIX 扩展正则表达式进行一些研究。但是,如果您知道头顶,有没有办法在 POSIX 扩展正则表达式中表达“不以 end1 或 end2 结尾”?
  • @XiaopingWen 这对 POSIX ERE 来说并不是一件小事,我什至不知道它是否可能.. 你可以看看这里 stackoverflow.com/questions/2837706/… 但我想你会需要一个惰性量词.*?这在 POSIX ERE 中也不存在。
  • 你说得对,POSIX ERE 只是没有表达能力。幸运的是,我的主要目标是保护一组有限的端点,同时允许具有两种结尾的 URL。我想我将不得不一个一个地保护端点,每个端点都有一个 指令。
【解决方案2】:

正斜杠一般需要转义:

 "\/start\/.*(?!end1|end2)$"

【讨论】:

  • ^\/start\/.*(?!end1|end2)$ 如果需要以 /start/ 开头
  • 它同样抱怨。 “/”可能不是问题,因为我有另一个更简单的正则表达式,它使用“/”但工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多