Lua中模式匹配的几个问题

Lua中模式匹配的几个问题,lua,lua-patterns,Lua,Lua Patterns,我一直在为我使用的一个程序开发一个天气预报器,它在大部分情况下运行良好。这是我到目前为止所拥有的。(不要注意zs.stuff。这是特定于程序的,与Lua编码无关。) 如果不是http,那么http=require(“socket.http”)结束 本地语言环境=string.gsub(zs.params(1),“%s+”,“%%20”) 本地页面=http.request(“http://www.wunderground.com/cgi-bin/findweather/getForecast?q

我一直在为我使用的一个程序开发一个天气预报器,它在大部分情况下运行良好。这是我到目前为止所拥有的。(不要注意zs.stuff。这是特定于程序的,与Lua编码无关。)

如果不是http,那么http=require(“socket.http”)结束
本地语言环境=string.gsub(zs.params(1),“%s+”,“%%20”)
本地页面=http.request(“http://www.wunderground.com/cgi-bin/findweather/getForecast?query=“.locale..”&wuSelect=WEATHER”)
本地位置=string.match(第页,'title=“([%w%s,]+)RSS“)
--打印(“为“.位置..”收集天气信息)
--本地风速=string.match(第页,([%d.]+)mph'))
--打印(风速)
本地条件=字符串。匹配(第页“”)
--本地图像=字符串。匹配(第页“”)
本地温度=字符串。匹配(第页,'pwsvariable=“tempf”english=“°;F”metric=“°;C”value=“([%d.]+)”>)
本地湿度=字符串。匹配(第页,'pwsvariable=“湿度”english=”“metric=”“value=“(%d+)”)
萨伊(地点)
--zs.say(“image./Images/”.image...gif)
Z.说(“条件:…条件…”)
Z.说(“温度:……温度……“F”)
zs.说(“湿度:…湿度…”)
我的主要问题是:我更改了“条件”,并将“图像”变量添加到它们现在的状态。即使它应该匹配的行直接来自网页,但它根本不匹配。所以我想知道我遗漏了什么阻止了这段代码的工作。如果我取出
它将完美地匹配条件。(无论出于何种原因,我无法正确显示上述行,但`<和img之间没有空格)

有人能指出它有什么问题吗?除了模式匹配之外,我向您保证这一行是来自网页的逐字逐句


我的另一个问题是,是否有能力跨线比赛。有什么可能的方法可以做到这一点吗?我之所以问这个问题,是因为在同一页上,我需要匹配的一些内容被分为不同的行,而且由于我想要匹配的实际模式显示在页面的其他位置,我需要能够跨行匹配,以获得准确的模式

你可以大大简化你的比赛(见下文),但总的来说,你似乎有两个问题

  • 缺少要捕获的比赛周围的()
  • 你需要逃离这个世界。通过将字符设置为%
我试过这个,它成功了

local page = [[<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/hello_world.gif" width="42" height="42" alt="HELLO WOLRD" class="condIcon" />]]
local condition, image = string.match(page, '.+/([%w_]+)%.gif".+alt="([%w%s]+)".+')
print(condition, image)

至于多行,这不应该是一个问题,换行符只是控制字符,如果您将多行读入同一个字符串中,则此匹配有效。

太好了!拥有一双新鲜的眼睛总是有帮助的。谢谢然而,我遇到了另一个问题,我似乎也无法解决这个问题。如果是位置,那么就在这里打印zs.say stuff here else(“未找到位置!”)结束。我似乎无法让它工作。我想让它做的是,如果找不到位置,就通知我错误。然而,不管我怎么做,它似乎都绕过了它,完全忽略了if语句。不过,我想这是我错过的另一件事。再次感谢你的帮助!请尝试打印location的值,以验证它是否是if语句之前所期望的值,如果location是空字符串,则“if location”将计算为truethank!事实上,我发现这是我的一个错误——我把if位置部分放在了错误的部分。我应该把它放在打印之前(“收集信息…”),在那里我连接了位置。我/想/我现在可以从这里得到剩下的。谢谢你的帮助!
local page = [[<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/hello_world.gif" width="42" height="42" alt="HELLO WOLRD" class="condIcon" />]]
local condition, image = string.match(page, '.+/([%w_]+)%.gif".+alt="([%w%s]+)".+')
print(condition, image)
hello_world    HELLO WORLD