2016-09-18 40 views
0

我正在尝试为重定向规则编写一个正则表达式,该规则将包含2010到2012年的文件夹,但排除两个非常特定的页面slu。。我的网址是设置如下所示:开始但不包含的正则表达式

/2016/09/18 /我的页面 - 塞/

这两个网页:

/2011/04/11 /一些页/ /2012/06/15/another-page-2/

我有类似于^/2010 | 2011 | 2012 /.*的匹配所有在那些年份开始的子目录,不确定如何为那些页面slu。。

我可能需要负面看起来像(?!some-page | another-page-2),但不知道如何设置它。

+0

你必须使用一个负向前看,以匹配不包含字符串的内容。 – Barmar

+0

查看http://stackoverflow.com/questions/33639856/regex-combine-negative-lookahead-and-regular-search – Barmar

+0

@Barmar感谢这非常有帮助。它明确指出了我的正确方向。真正帮助我的是我用来测试正则表达式的变体的debuggex链接,直到我得到正确的答案。 – user3376065

回答

1

为什么不直接写两个正则表达式呢?我的意思是,如果你想要,

^\/201[012]\/\d*\/\d*\/(?!(some-page|another-page-2)) 

对这些字符串中的任何一个做一个否定的期待。

你必须非常具体地说明如何匹配字符串以及它们在哪里弹出页面。因为你需要确保其他一些东西,如.*不能已经吃掉你想要处理的东西。因此,您需要指定目录,以便它必须跟随slug页面,然后执行负向预测。你会注意到它会停止工作,如果你做了类似.*(反向预测)的事情,因为.*会贪婪地匹配所有内容,然后是$,因此所有的优点和负面匹配都不会打折字符串。

0

所以这里的人谁是有兴趣的什么工作:

^/(?!.*slug1/|.*slug2/)(?:2010|2011|2012)(.*)$ 

真正帮助我正确的答案是这样的网站,可以让你很方便地测试你的正则表达式:https://www.debuggex.com/