我一直在爲我使用的程序開發一款天氣預報器,並且它在大多數情況下運行良好。這是我到目前爲止。 (不注意的zs.stuff也就是說程序具體和對Lua的編碼沒有關係。)一對模式匹配問題與模式匹配在Lua
if not http then http = require("socket.http") end
local locale = string.gsub(zs.params(1),"%s+","%%20")
local page = http.request("http://www.wunderground.com/cgi-bin/findweather/getForecast?query=" .. locale .. "&wuSelect=WEATHER")
local location = string.match(page,'title="([%w%s,]+) RSS"')
--print("Gathering weather information for " .. location .. ".")
--local windspeed = string.match(page,'<span class="nobr"><span class="b">([%d.]+)</span> mph</span>')
--print(windspeed)
local condition = string.match(page, '<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/[%w_]+.gif" width="42" height="42" alt="[%w%s]+" class="condIcon" />')
--local image = string.match(page, '<img src="http://icons-ecast.wxug.com/i/c/a/(.+).gif" width="42" height="42" alt="[%w%s]+" class="condIcon" />')
local temperature = string.match(page,'pwsvariable="tempf" english="°F" metric="°C" value="([%d.]+)">')
local humidity = string.match(page,'pwsvariable="humidity" english="" metric="" value="(%d+)"')
zs.say(location)
--zs.say("image ./Images/" .. image .. ".gif")
zs.say("<color limegreen>Condition:</color> <color white>" .. condition .. "</color>")
zs.say("<color limegreen>Temperature: </color><color white>" .. temperature .. "F</color>")
zs.say("<color limegreen>Humidity: </color><color white>" .. humidity .. "%</color>")
我的主要問題是:我改變了「狀況」,並增加了「形象」變量到他們現在的樣子。即使它應該匹配的行直接來自網頁,但它根本無法匹配。所以我想知道我錯過了什麼是阻止這些代碼工作。如果我拿出
<td class="vaM taC">
< img src =「http://icons-ecast.wxug.com/i/c/a/[%w_]+.gif」
它會完美地匹配條件。 (無論出於何種原因,我無法正確顯示上面的行,但在<和img之間沒有空格)
任何人都可以指出它有什麼問題嗎?除了模式匹配之外,我向你保證該行在網頁上是逐字的。
我的另一個問題是跨越換行符匹配的能力。有沒有可能的方法來做到這一點?我之所以問,是因爲在同一頁面上,我需要匹配的部分內容分成不同的行,並且由於我想要匹配的實際模式顯示在頁面上的其他位置,所以我需要能夠跨越換行符匹配以獲得確切的模式。
非常好!它總是有助於擁有一個全新的眼睛。謝謝! 但是,我遇到了另一個問題,我似乎也無法解決這個問題。 如果位置再 做zs.say的東西在這裏 其他 打印(「未找到位置!」) 結束 我似乎無法得到那個工作。我想要它做的是如果找不到我的位置通知我的錯誤。但是,無論我如何做,它似乎都會繞過它,完全忽略if語句。不過,我認爲這是我錯過的另一件事。再次感謝幫助! – Josh 2010-04-02 23:17:16
嘗試打印位置的值以驗證它是您的if語句之前的期望值,如果位置爲空字符串,則「if location」將評估爲true – 2010-04-02 23:34:42
謝謝!我實際上發現這是我的錯誤 - 我在錯誤的部分中有if位置部分。我應該在打印之前(「收集信息...」)在連接位置的地方放置它。我想/我現在可以從這裏得到休息。感謝你的幫助! – Josh 2010-04-03 00:11:15