URL正则表达式中的大括号()表示什么?

时间:2013-02-11 16:40:41

标签: regex

例如,在

r'^articles/(\d{4})/$', 'news.views.year_archive'

我理解除(\ d {4})之外的所有正则表达式。四位数,但为什么大括号?

(python / django示例)

另一个例子:

r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'

2 个答案:

答案 0 :(得分:3)

大括号用于分组,可用于提取匹配的子集。它们也可用于指示子集重复(或是可选的),尽管你的正则表达式不会那样使用它们。

请参阅http://www.regular-expressions.info/brackets.html

根据用法,我打赌与此URL匹配的代码使用括号来提取年份,以便可以在查询中使用它。请参阅Match object

的组功能

Django自动提取分组的子表达式并将其用作视图的参数:

  

视图会将HttpRequest作为其第一个参数传递,并将正则表达式中捕获的任何值作为剩余参数传递。
  ...
  对/articles/2005/03/的请求将与列表中的第三个条目匹配。 Django会调用函数news.views.month_archive(request, '2005', '03')

https://docs.djangoproject.com/en/dev/topics/http/urls/

答案 1 :(得分:2)

除了将正则表达式的一部分组合在一起外,圆括号还会创建“反向引用”。 backreference存储由括号内的正则表达式部分匹配的字符串部分。