2

Djangoバージョン:1.5(トランク)

私はURLパターンAでポジティブ先読みアサーションを使用していますが、これはそれ自体で正常に機能します。しかし、完全に無関係なURLパターンBを逆にしようとすると、次のようになります。

ValueError: Non-reversible reg-exp portion: '(?='

URLの例:

url(r'^foo(?=bar)/', test, name= 'bla'),
url(r'bar/', test, name= 'bli'),

エラーのトリガー:

from django.core.urlresolvers import reverse
reverse('bli')

この関連チケットを見つけましたが、悲しいことに私を賢くしませんでした https://code.djangoproject.com/ticket/17492

誰でもコードの何が問題なのか教えてくれますか?

4

1 に答える 1

5

あなたのコードは問題ありません。問題は、Django が可能なすべての正規表現を元に戻すことができないことです。現在、Django の正規表現ノーマライザーの実装は、分離 ( |) と非キャプチャ (先読み、後読み) パターンの少なくとも 2 つを処理できません。

したがって、問題を解決するには、URL パターンで先読みを使用しないようにすれば、問題ありません。結局のところ、ファンキーな拡張機能を一切使用せずにプレーンな正規表現を使用して、任意の正規言語を表すことができるはずです。

于 2012-05-13T10:31:20.607 に答える