除某些匹配项外的所有项的正则表达式

2024-04-24 21:13:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个重定向regex脚本,它将用户转发到另一个域,路径不变,除非路径与特定的内容匹配。在

http://www.a.com/anything/foo/bar -> http:www.b.com/anything/foo/bar

但如果路径以特殊的方式开始,则不要重定向:

http://www.a.com/special/1/2/3 -> no redirect

我的重定向应用程序是这样工作的:我把条目一行一行地放在一起(这很好):

"^/(?P<path>[-\w]+)/(?P<foo>[-\w]+)/(?P<bar>[-\w]+)/$","%(path)s/%(bar)s/%(foo)s/"
"^/(?P<path>.*)$","http://www.b.com/%(path)s"

所以像这样的事情(不起作用):

"^/(?P<path>!(special).*)$","http://www.b.com/%(path)s"


Tags: path用户路径脚本comhttp内容foo
2条回答

你在寻找消极的前景:

"^/(?P<path>(?!special/).*)$","http://www.b.com/%(path)s"

(?!...)语法表示:

(?!...)
Matches if ... doesn’t match next. This is a negative lookahead assertion. For example, Isaac (?!Asimov) will match 'Isaac ' only if it’s not followed by 'Asimov'.

因此,如果路径以/开头,但后面是special/,则表达式匹配。在

演示:

^{pr2}$

http://www.a.com/(?!special).*将匹配以http://www.a.com/开头的任何内容,但不匹配http://www.a.com/special。在

相关问题 更多 >