0

例如,在

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

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

(python/django 示例)

另一个例子:

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

2 回答 2

3

大括号用于分组,可用于提取匹配的子集。它们也可用于指示子集重复(或可选),尽管您的正则表达式不以这种方式使用它们。

http://www.regular-expressions.info/brackets.html

根据使用情况,我敢打赌与此 URL 匹配的代码使用方括号来提取年份,以便可以在查询中使用它。查看Match 对象的分组功能


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

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

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

于 2013-02-11T16:41:57.423 回答
2

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

于 2013-02-11T16:42:56.810 回答