美元符号($)在龙卷风的URL模式结束时

时间:2012-09-20 09:13:22

标签: regex url tornado

我已经看到一些网址正则表达式以一个Tornado应用程序中的$结尾递给我的团队......也许我不是网络文化最多的人,这对其他人来说很明显,但我看不到它匹配整个字符串(不在内部搜索)时明确指出行尾的区别。

有什么东西我缺少或者只是多余的吗?

编辑以更清楚我的意思:

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

应该完全相同:

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

当处理程序调度程序查找完全匹配时,而不是子字符串。

2 个答案:

答案 0 :(得分:4)

不同之处在于$符号确保模式即使完全匹配,也不是另一个模式的子串。请参阅这两个正则表达式以匹配网址模式。

    带有$符号的
  1. http://regexr.com?327d2

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

  3. 以下是djangobook的一些摘录,也可能与龙卷风有关:

    ^hello/$

      

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

         

    这个概念最好用例子来解释。如果我们改为使用了   pattern'^ hello /'(最后没有美元符号),然后是任何URL   以/ hello /开头匹配,例如/ hello / foo和/ hello / bar,   不只是/你好/。同样,如果我们放弃了最初的插入符号   字符(即'hello / $'),Django将匹配以任何结尾的URL   你好/,比如/ foo / bar / hello /。如果我们只使用hello /,没有   插入符号或美元符号,然后包含hello /的任何URL匹配,   例如/ foo / hello / bar。因此,我们使用插入符号和美元符号   确保只有URL / hello /匹配 - 仅此而已。

答案 1 :(得分:3)

龙卷风中不需要尾随$。我把它们放在习惯之外,因为我觉得它更清楚,但是r"^/hello"只会匹配/你好。

我们可以通过查看URLSpec source

来看到这一点
if not pattern.endswith('$'):
    pattern += '$'