Regex Tornado中URL模式末尾的美元符号($)
我在一个交给我团队的Tornado应用程序中看到一些URL regexp以$结尾。。。也许我不是最懂网络的人,这对其他人来说是显而易见的,但我看不出在匹配整个字符串时显式指示行的结尾有什么区别(不在内部搜索) 有什么东西是我遗漏的还是多余的 编辑以明确我的意思:Regex Tornado中URL模式末尾的美元符号($),regex,url,tornado,Regex,Url,Tornado,我在一个交给我团队的Tornado应用程序中看到一些URL regexp以$结尾。。。也许我不是最懂网络的人,这对其他人来说是显而易见的,但我看不出在匹配整个字符串时显式指示行的结尾有什么区别(不在内部搜索) 有什么东西是我遗漏的还是多余的 编辑以明确我的意思: handlers = [ tornado.web.URLSpec(r'/About/$', ShowSettingsHandler), ... ] 这应该与以下内容完全相同: hand
handlers = [
tornado.web.URLSpec(r'/About/$', ShowSettingsHandler),
...
]
这应该与以下内容完全相同:
handlers = [
tornado.web.URLSpec(r'/About/', ShowSettingsHandler),
...
]
当处理程序分派器查找精确匹配而不是子字符串时。不同之处在于,
$
符号确保该模式即使完全匹配,也不是另一个模式的子字符串。查看这两个正则表达式以匹配url模式
^hello/$
该模式包括插入符号(^)和美元符号($)。这些是
具有特殊含义的正则表达式字符:插入符号
表示“要求模式匹配字符串的开头”,以及
美元符号的意思是“要求图案与结尾相匹配”
绳子。”
这个概念最好用例子来解释。如果我们改用
模式“^hello/”(结尾不带美元符号),然后是任意URL
以/hello/开头将匹配,例如/hello/foo和/hello/bar,
不仅仅是/你好/。类似地,如果我们没有使用初始插入符号
字符(即“hello/$”),Django将匹配以
hello/,例如/foo/bar/hello/。如果我们只使用hello/,而不使用
插入符号或美元符号,则任何包含hello/的URL都将匹配,
例如/foo/hello/bar。因此,我们使用插入符号和美元符号来
确保只有URL/hello/匹配-不多也不少
区别在于,
$
符号确保模式即使完全匹配,也不是另一个模式的子字符串。查看这两个正则表达式以匹配url模式
^hello/$
该模式包括插入符号(^)和美元符号($)。这些是
具有特殊含义的正则表达式字符:插入符号
表示“要求模式匹配字符串的开头”,以及
美元符号的意思是“要求图案与结尾相匹配”
绳子。”
这个概念最好用例子来解释。如果我们改用
模式“^hello/”(结尾不带美元符号),然后是任意URL
以/hello/开头将匹配,例如/hello/foo和/hello/bar,
不仅仅是/你好/。类似地,如果我们没有使用初始插入符号
字符(即“hello/$”),Django将匹配以
hello/,例如/foo/bar/hello/。如果我们只使用hello/,而不使用
插入符号或美元符号,则任何包含hello/的URL都将匹配,
例如/foo/hello/bar。因此,我们使用插入符号和美元符号来
确保只有URL/hello/匹配-不多也不少
Tornado中不需要拖尾
$
。我把它们放进去是出于习惯,因为我认为这样更清楚,但是r“^/hello”
只会匹配/hello
我们可以通过查看以下内容来了解这一点:
Tornado中不需要拖尾
$
。我把它们放进去是出于习惯,因为我认为这样更清楚,但是r“^/hello”
只会匹配/hello
我们可以通过查看以下内容来了解这一点:
这有帮助吗(关于python正则表达式)不,我已经知道正则表达式是如何工作的,我想知道Tornado中是否有特别需要那美元。这有帮助吗(关于python正则表达式)不,我已经知道正则表达式是如何工作的,我想知道Tornado中的$in是否有特殊的需求。我认为Tornado和Django的行为不同,如果你想匹配任何包含模式的url,你必须在前后显式添加
*
。@fortran据我所知,当你想使用添加/删除斜杠装饰符时,会添加*。这适合Django,但不是龙卷风。我将添加一个答案。我认为Tornado和Django的行为不同,如果你想匹配任何包含模式的url,你必须在前后显式添加*
。@fortran据我所知,当你想使用添加/删除斜杠装饰符时,会添加*。这适合Django,而不是Tornado。我会补充一个答案。
if not pattern.endswith('$'):
pattern += '$'