我已经看到了一些网址与已交给我的团队在龙卷风应用一个$结尾的正则表达式......也许我不是最有文化的网络的家伙,这是对别人很明显,但我看不出区别它使得明确表示行的末尾匹配整个字符串(内未搜索)时。
有没有办法,我失去了一些东西,或者仅仅是多余的?
编辑以更清楚我的意思:
handlers = [
tornado.web.URLSpec(r'/About/$', ShowSettingsHandler),
...
]
这应该是完全一样的:
handlers = [
tornado.web.URLSpec(r'/About/', ShowSettingsHandler),
...
]
作为处理调度员查找精确匹配,而不是一个字符串。
没有必要对尾随$
的龙卷风。 我把他们出于习惯,因为我觉得它更清晰,但r"^/hello"
将只匹配/你好。
我们可以通过观察看到URLSpec来源 :
if not pattern.endswith('$'):
pattern += '$'
所不同的是, $
符号可确保即使完全匹配的模式,是不是另一种模式的子字符串。 看到这两个正则表达式匹配的URL模式。
用$符号: http://regexr.com?327d2
没有$符号: http://regexr.com?327d5
这里是从一些摘录djangobook ,这可能是相关的龙卷风,以及:
^hello/$
该模式包括尖号(^)和美元符号($)。 这些是有特殊含义的正则表达式的字符:插入符号的意思是“要求该模式字符串的开头匹配,”美元符号的意思是“要求该模式字符串的结尾相匹配。”
这个概念是最好的例子来解释。 如果我们不是用模式“^ hello /的”(没有在最后一个美元符号),然后开始/你好/将匹配,如/你好/ foo的任何URL和/你好/条,不只是/你好/ 。 同样,如果我们离开了最初的脱字符(即,“你好/ $”),Django的将匹配以hello /的结束,如/富/酒吧/ hello /的任何URL。 如果我们只是简单地使用你好/,无需插入符号或美元符号,然后含你好任何URL /将匹配,如/富/你好/条。 因此,我们同时使用插入符号和美元符号确保只有URL / hello /的匹配 - 仅此而已,无所不及。