我想测试一个不以.html结尾的url
这是我想出的模式:
[/\w\.-]+[^\.html$]
以下匹配项,因为它不是以.html结尾
/blog/category/subcategory/
这不匹配,因为它以.html结尾
/blog/category/subcategory/index.html
但是,以下代码不匹配,尽管我希望它匹配,因为它以.ht而不是.html结尾
/blog/category/subcategory/index.ht
我应该如何改变我的模式?
发布于 2011-02-12 05:01:54
如果您的正则表达式引擎支持负向回看断言,则可以使用该断言:
^[/\w\.-]+(?<!\.html)$
如果你没有lookahead断言,但是你有lookahead,那么你可以用它来代替:
^(?!.*\.html$)[/\w\.-]+$
在线查看它的工作方式:rubular
发布于 2011-02-12 05:01:18
你用的是什么引擎?如果它支持先行断言,您可以执行以下操作:
/((?!\.html$)[/\w.-])+/
如果我们把它分解成组件,它看起来像这样:
( # start a group for the purposes of repeating
(?!\.html$) # negative lookahead assertion for the pattern /\.html$/
[/\w.-] # your own pattern for matching a URL character
)+ # repeat the group
这意味着,对于每个字符,在使用该字符之前,它会测试/.html$/模式在这里是否不匹配。
您可能还希望在开头使用^
并在末尾使用$
锚定整个模式,以强制其匹配整个URL -否则,它可以只匹配URL的一部分。随着这一变化,它变成了
/^((?!\.html$)[/\w.-])+$/
https://stackoverflow.com/questions/4973977
复制相似问题