我一直在为我使用的一个程序开发一个天气预报器,它在很大程度上运行良好。这是我到目前为止所拥有的。(不要注意 zs.stuff。这是特定于程序的,与 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 之间没有空格)
谁能指出它有什么问题?除了模式匹配之外,我向您保证该行是从网页逐字记录的。
我遇到的另一个问题是跨换行符匹配的能力。有没有办法做到这一点?我问的原因是因为在同一页面上,我需要匹配的一些东西被分成不同的行,并且由于我想要匹配的实际模式出现在页面的其他位置,我需要能够跨换行符匹配以获得确切的模式。