Python (.*js$)和.*(js)之间有什么区别$
我正在使用tornado构建一个服务器。它基于python,我需要执行以下操作:Python (.*js$)和.*(js)之间有什么区别$,python,regex,tornado,Python,Regex,Tornado,我正在使用tornado构建一个服务器。它基于python,我需要执行以下操作: application.add_handlers(r"^(www).*",[ (r"/(.*js$)", tornado.web.StaticFileHandler, {'path': 'static/'}), (r"/(.*xml$)", tornado.web.StaticFileHandler, {'path': 'static/'}), (r"/(.*css$)", tornado.
application.add_handlers(r"^(www).*",[
(r"/(.*js$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/(.*xml$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/(.*css$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/(.*jpg$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/(.*png$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/(.*ico$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/(.*html$)", tornado.web.StaticFileHandler, {'path': 'static/'}),
(r"/$", IndexHandler),
])
上面的代码将告诉http请求它请求的资源的位置。因此,这里我告诉一个http请求,它可以在路径/static/
下获取js、xml、css、jpg、png、ico和html文件它确实工作得很好,但我不太理解正则表达式部分。
正如您所看到的,是一个正则表达式,用于匹配http请求。如果http请求正在查找js文件,第一个正则表达式将被匹配,但我不知道如何匹配。
据我所知,如果我想匹配一个js文件,我需要这样做一个正则表达式:
r/.*(js)$”
,这意味着文件以js
结尾。我试过了,但没用。那么为什么
(.*js$)
可以工作呢?这不是意味着文件的结尾是一个字母s
,而不是js
?*(js)$
和(.*js$)
之间有什么区别?此外,^.*abc$
,*abc$
,^.*abc
,*(abc)$
,^.*(abc)
,它们之间的区别是什么?我一定是误解了或者不理解关于正则表达式中
()
、^
和$
的一些规则。之间的部分是作为捕获的组返回的
您的替代模式只返回“js”,这对于查找URL的静态资源没有多大用处。原始文件返回完整路径(减去前导斜杠)
因此,是的,您的模式也与URL匹配,但它不会返回解析到任何静态资源的路径(尝试创建一个名为static/js
的文件,看看您是否得到了该文件)。圆括号()表示捕获组。例如,如果您的地址是
r/(*js$)”
将匹配并捕获www.example.com/something.jsr/.*(js)$”
也将匹配,但只捕获js
我不知道tornado是什么,但我假设它与捕获的地址有关,所以如果你不了解全部内容,即使正则表达式匹配,它也不会工作。对于其他问题,请尝试查找有关基本正则表达式含义的更多信息(.*js$)为什么起作用`
上面的正则表达式匹配以js
结尾的任何内容,而不仅仅是扩展名为js
查看此正则表达式并进行解释 要匹配具有
js
扩展名的文件,您需要以下正则表达式
(.*\.js$)
你问的其实是关于正则表达式的教程。它们已经存在于网上了:,很好。这似乎是假定工作版本的一个问题。@Yves:你从哪里得到路由表的?过度渴望的匹配应该在那里解决。非常感谢。Tornado是构建web服务器的新框架。它与tomcat一样,但非常轻巧且易于学习。请注意,
*
是否在括号内很重要,但$
是否在括号内并不重要(在本例中)$
在正则表达式中是“零宽度匹配”,因此它对捕获组没有任何贡献。在更复杂的情况下,$
的位置可能会有所不同(例如,如果使用了|
)。