-->

在URL模式在龙卷风结束美元符号($)(Dollar sign ($) at the end of

2019-10-17 05:41发布

我已经看到了一些网址与已交给我的团队在龙卷风应用一个$结尾的正则表达式......也许我不是最有文化的网络的家伙,这是对别人很明显,但我看不出区别它使得明确表示行的末尾匹配整个字符串(内未搜索)时。

有没有办法,我失去了一些东西,或者仅仅是多余的?

编辑以更清楚我的意思:

   handlers = [
        tornado.web.URLSpec(r'/About/$', ShowSettingsHandler),
        ...
   ]

这应该是完全一样的:

   handlers = [
        tornado.web.URLSpec(r'/About/', ShowSettingsHandler),
        ...
   ]

作为处理调度员查找精确匹配,而不是一个字符串。

Answer 1:

没有必要对尾随$的龙卷风。 我把他们出于习惯,因为我觉得它更清晰,但r"^/hello"将只匹配/你好。

我们可以通过观察看到URLSpec来源 :

if not pattern.endswith('$'):
    pattern += '$'


Answer 2:

所不同的是, $符号可确保即使完全匹配的模式,是不是另一种模式的子字符串。 看到这两个正则表达式匹配的URL模式。

  1. 用$符号: http://regexr.com?327d2

  2. 没有$符号: http://regexr.com?327d5

这里是从一些摘录djangobook ,这可能是相关的龙卷风,以及:

^hello/$

该模式包括尖号(^)和美元符号($)。 这些是有特殊含义的正则表达式的字符:插入符号的意思是“要求该模式字符串的开头匹配,”美元符号的意思是“要求该模式字符串的结尾相匹配。”

这个概念是最好的例子来解释。 如果我们不是用模式“^ hello /的”(没有在最后一个美元符号),然后开始/你好/将匹配,如/你好/ foo的任何URL和/你好/条,不只是/你好/ 。 同样,如果我们离开了最初的脱字符(即,“你好/ $”),Django的将匹配以hello /的结束,如/富/酒吧/ hello /的任何URL。 如果我们只是简单地使用你好/,无需插入符号或美元符号,然后含你好任何URL /将匹配,如/富/你好/条。 因此,我们同时使用插入符号和美元符号确保只有URL / hello /的匹配 - 仅此而已,无所不及。



文章来源: Dollar sign ($) at the end of URL patterns in Tornado