我使用龍捲風來構建服務器。它是基於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