Regex查找一些.php文件

Regex查找一些.php文件,regex,regex-negation,Regex,Regex Negation,我正在尝试为爬虫创建一个排除正则表达式。我想为出现在/archives/目录中的所有.php文件编制索引,但不在其他任何地方。因此,正则表达式应该匹配所有.php文件,除了那些位于/archives/目录中的文件(不管嵌套程度有多深)。例如,它将索引 www.mysite.com/archives/123qwe/index.php 但不是 www.mysite.com/123qwe/index.php 我相信这个正则表达式应该可以工作:( 但是,我无法使用难道你不能贪婪地指定你想要在正则表

我正在尝试为爬虫创建一个排除正则表达式。我想为出现在
/archives/
目录中的所有
.php
文件编制索引,但不在其他任何地方。因此,正则表达式应该匹配所有
.php
文件,除了那些位于
/archives/
目录中的文件(不管嵌套程度有多深)。例如,它将索引

www.mysite.com/archives/123qwe/index.php 
但不是

www.mysite.com/123qwe/index.php
我相信这个正则表达式应该可以工作:


但是,我无法使用
难道你不能贪婪地指定你想要在正则表达式中存档吗

^(\/archives\/.+?)\.php$
那怎么办

(?!.*\/magazine\/)(?:^.*\.php$)
这是一个负向前看,而不是负向后看。如果字符串中没有
/magazine/
,并且以
.php
结尾,则此正则表达式应该匹配

这与您的方法非常相似,但如果没有
,请尝试以下方法:

^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永远不应该是你想要的第一个工具。事实上,我倾向于将它们视为最后的手段。它们只是没有足够的用处来抵消它们引入的复杂性。

这个问题不是关于正则表达式本身,而是关于表单序列化。我正在寻找一个替代方法使我的正则表达式匹配的本机方法。我无法控制表单,因此我无法使用与我想要的相反的方法。我的正则表达式必须避免匹配/archives/…php,只匹配具有.php但不具有/archives/的URL。明白了,感谢您的确认-您在这个问题上自相矛盾。“我想索引所有出现在/archives/目录中的.php文件,但不在其他任何地方。”这看起来很有希望。我会把它放在爬虫程序中,如果它能运行,我会给你投票…谢谢。完美。它完全按照我的要求运行。谢谢!我想我会使用
^www.mysite.com(?(!/archives/)\S)+\.php$
,因为它比较短,不需要那么多的量词。我们两个都会通过
www.mysite.com/123qwe/index/archives.php
,但我认为根据原始规范这是可以的。Lookbehinds看起来确实有很多麻烦!我在stema的答案中使用了regex,但我怀疑这也会起作用。谢谢。