正则表达式找到一些.php文件

时间:2011-04-21 19:42:44

标签: regex regex-negation

我正在尝试为抓取工具排除正则表达式。我想索引.php目录中出现的所有/archives/文件,但不是其他任何地方。因此正则表达式应匹配所有.php文件,但/archives/目录中的文件除外(但深度嵌套)。因此,例如,它将索引

www.mysite.com/archives/123qwe/index.php 

但不是

www.mysite.com/123qwe/index.php

我相信这个正则表达式应该有效:(?<!\/archives\/.*)\.php$

但是,我无法使用<字符,因为我需要将正则表达式提交到一个网页表单中,以便从输入中清除<。使用&lt;打破了正则表达式。那么有没有另外一种形成这个正则表达式的方法,而不需要<

3 个答案:

答案 0 :(得分:2)

怎么样?
(?!.*\/magazine\/)(?:^.*\.php$)

这是一个消极的向前看,而不是你的负面看法。如果字符串中没有/magazine/并且以.php

结尾,则此正则表达式应该匹配

这与您的方法非常相似,但没有<

您可以在Regexr

上看到它的实际效果

答案 1 :(得分:2)

试试这个:

^www\.mysite\.com(?:/(?!archives/)[^/.]+)+\.php$

或者,更清晰:

^www\.mysite\.com
(?:
  /               # After consuming the `/`...
  (?!archives/)   # if the next name isn't `archives`...
  [^/.]+          # consume it. 
)+                # Repeat as needed.
\.php$

当你创建一个正则表达式并且你不确定如何继续时,lookbehinds永远不应该是你达到的第一个工具。事实上,我倾向于将它们视为最后的手段。它们只是没有用来抵消它们引入的复杂性。

答案 2 :(得分:0)

难道你不能只是贪婪并指定你想在正则表达式中存档吗?

^(\/archives\/.+?)\.php$