0

パスが特定のものと一致する場合を除いて、パスをそのままにして別のドメインにユーザーを転送するリダイレクト正規表現スクリプトを作成しようとしています。

すなわち

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"

4

2 に答える 2

2

http://www.a.com/(?!special).*で始まるが でhttp://www.a.com/はないものすべてに一致しhttp://www.a.com/specialます。

于 2013-03-29T11:28:47.910 に答える
1

あなたは否定的な先読みを探しています:

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

(?!...)構文の意味は次のとおりです。

(?!...)
...次に一致しない 場合に一致します。これは否定先読みアサーションです。たとえば、が後にない場合にのみIsaac (?!Asimov)一致します。'Isaac ''Asimov'

したがって、パスが で始まり、その後に/続かない場合、式は一致しspecial/ます。

デモ:

>>> import re
>>> re.search(r"^/(?P<path>(?!special/).*)$", '/special/path') is None
True
>>> re.search(r"^/(?P<path>(?!special/).*)$", '/not-so-special/path').groupdict()
{'path': 'not-so-special/path'}
于 2013-03-29T11:27:29.923 に答える