我有两个正则表达式(简化为相等)
r'^(?P<slug>(^foo)[-\w]+)/$'
r'^(?P<slug>(^foo)[-\w]+)/$'
我想在第一个上添加一个排除项来检查结尾,这样后面的就赢了。你知道吗
例如:
foobar/
应该通过第一个,而不是后者
我希望foobar-my-string/
第一个失败,但与后者匹配
我试过@sdanzig的答案:
r'^(?P<slug>(^foo)[-\w]+(?!my-string$))/$'
r'^(?P<slug>(^foo)[-\w]+)/$'
但它不起作用,我总是用字符串进入后者,不管字符串是以“我的字符串”结尾还是以“我的字符串”结尾
我也尝试了另一种方法,因为我的正则表达式是自上而下计算的,但它也不起作用:
r'^(?P<slug>(^foo)[-\w]+(my-string$))/$'
r'^(?P<slug>(^foo)[-\w]+(?!my-string$))/$'
更正。。。对于这个特殊的需求,您需要在$之前有一个look-BEHIND断言,以确保字符串不会以my string/结尾:
我真的不知道你想用这个。。。看起来你想捕获它,可选吗?你可以把(?)?:P)?就在foo之前:
您应该对第二个regex使用这个负lookahead,因为
[-\w]+
是贪婪的,所以您甚至在触发负lookahead检查之前就消耗了整个字符串。你知道吗相关问题 更多 >
编程相关推荐