否定词匹配

时间:2013-05-22 23:07:28

标签: regex regex-lookarounds

我要发疯了。我正在尝试匹配以.html结尾的所有字符串,而不是以/index.html结尾的字符串。为了重写目的,你会猜到。 (我正在使用nginx)

我尝试过这样的事情:

^(.*[^(\/index)])\.html$

^(.*)(?!index)\.html$

但点似乎总是吃掉整个东西。

# Should match
/page.html
/folder/page.html

# Should not match
/page
/page/index.html
/index.html

为什么这不起作用?

3 个答案:

答案 0 :(得分:2)

你没有说明你的,但许多正则表达式支持lookbehinds。在您的情况下可以用作:

(?<!index)\.html$

答案 1 :(得分:0)

一种保证可行的相当简单的方法:

.*([^i].*|i[^n].*|in[^d].*|ind[^e].*|inde[^x].*|index.+)\.html

这将匹配.*\.html匹配的所有内容,除非它以index.html结尾。

答案 2 :(得分:-1)

怎么样

^([^(\/index)]*)\.html$

实际上,我认为这与/index/page.html不匹配。