我使用龙卷风来构建服务器。它是基于Python的,我需要如下操作:
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文件。
它工作得很好,但我不太了解正则表达式的一部分。
正如你看到的r"/(.*js$)"
是一个正则表达式,它匹配一个http请求。如果http请求正在寻找一个js文件,第一个正则表达式将匹配,但我不知道如何。根据我的理解,如果我想匹配一个js文件,我需要这样做一个正则表达式:r"/.*(js)$"
,这意味着以js
结尾的文件。我试过了,但它不起作用。
那么为什么(.*js$)
工作?这是不是表示以一个字母s
而不是js
结尾的文件? .*(js)$
和(.*js$)
有什么区别?而且,^.*abc$
,.*abc$
,^.*abc
,.*(abc)$
,^.*(abc)
之间的区别是什么?
我必须误解或不能理解关于()
,^
和$
的一些规则。
什么你问的是真正的正则表达式的教程。它们已经在线存在:[一般](http://www.regular-expressions.info/tutorial.html),[关于锚点](http://www.regular-expressions.info/anchors.html),[关于组和捕获](http://www.regular-expressions.info/brackets.html) – viraptor