Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Tornado中URL模式末尾的美元符号($)_Regex_Url_Tornado - Fatal编程技术网

Regex Tornado中URL模式末尾的美元符号($)

Regex Tornado中URL模式末尾的美元符号($),regex,url,tornado,Regex,Url,Tornado,我在一个交给我团队的Tornado应用程序中看到一些URL regexp以$结尾。。。也许我不是最懂网络的人,这对其他人来说是显而易见的,但我看不出在匹配整个字符串时显式指示行的结尾有什么区别(不在内部搜索) 有什么东西是我遗漏的还是多余的 编辑以明确我的意思: handlers = [ tornado.web.URLSpec(r'/About/$', ShowSettingsHandler), ... ] 这应该与以下内容完全相同: hand

我在一个交给我团队的Tornado应用程序中看到一些URL regexp以$结尾。。。也许我不是最懂网络的人,这对其他人来说是显而易见的,但我看不出在匹配整个字符串时显式指示行的结尾有什么区别(不在内部搜索)

有什么东西是我遗漏的还是多余的

编辑以明确我的意思:

   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 += '$'