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,但我怀疑这也会起作用。谢谢。