web-dev-qa-db-ja.com

Django regexはどういう意味ですか? `?P`

Urls.pyに次の正規表現がありますが、その意味を知りたいです。具体的には、正規表現の_(?P<category_slug>_部分。

r'^category/(?P<category_slug>[-\w]+)/$

63
locoboy

(?P<name>regex)-丸括弧は、それらの間の正規表現をグループ化します。それらは、その中の正規表現に一致するテキストをキャプチャし、シャープな括弧の間の名前で参照できます。名前は文字と数字で構成されます。

コピーペースト: http://www.regular-expressions.info/refext.html

49
Marcus

Djangoでは、名前付きのキャプチャグループがキーワード引数としてビューに渡されます。

名前のないキャプチャグループ(括弧のみ)がビューに引数として渡されます。

?Pは、名前のないキャプチャグループではなく、名前の付いたキャプチャグループです。

http://docs.python.org/library/re.html

(?P<name>...)通常の括弧に似ていますが、グループと一致する部分文字列は、シンボリックグループ名名を使用して、正規表現の残りの部分からアクセスできます。グループ名は有効なPython識別子である必要があり、各グループ名は正規表現内で1回のみ定義する必要があります。シンボルグループは、グループに名前が付けられていないかのように番号付きグループでもあります。次の例のidという名前のグループは、番号付きグループ1として参照することもできます。

67

(?P<category_slug>)は、category_slugという名前の一致グループを作成します。

正規表現自体は、category/で始まり、英数字、ダッシュ-および下線_の後に続くスラッシュが続く文字列と一致します。

正規表現で受け入れられるURLの例:

  • category/foo /
  • category/foo_bar-baz /
  • category/12345 /
  • category/q1e2_asdf /
20
ThiefMaster