Lua中的模式匹配存在一些问题。

我正在为我使用的程序制作一个天气预报器,它大部分情况下都工作得很好。以下是我目前的代码。(不用关注zs.stuff,它是程序特定的,与Lua编码无关。)

我的主要问题是:我更改了“condition”,并将“image”变量更改为现在的状态。尽管它应该匹配的行直接来自网页,但它根本无法匹配。所以我想知道是什么让这段代码无法工作。如果我删掉

<td class="vaM taC"> < img src="http://icons-ecast.wxug.com/i/c/a/\[%w\_\]+.gif"

它将无误地匹配条件。 (由于某种原因,我无法使上面的行显示正确,但在<和img之间没有空格)

有人能指出它的问题在哪里吗?除了模式匹配外,我向你保证该行是从网页上引用的化整而来的。

我还有一个问题是,是否有可能跨越换行符匹配?我问这个问题的原因是在同一个页面上,我需要匹配的一些内容分别在不同的行上打断,因为我想要匹配的实际模式在页面上的其他位置出现,所以我需要能够跨越换行符进行匹配,以获得精确的模式。

原文链接 https://stackoverflow.com/questions/2569496

点赞
stackoverflow用户236455
stackoverflow用户236455

您可以大大简化匹配方式(请参见以下内容),但一般而言,您可能会遇到两个问题...

  • 在您希望捕获的匹配周围缺少()。
  • 您需要通过将它们变成%来转义匹配中的字符。 。

我尝试了这个并且成功了...

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

至于多行情况,这应该不是一个问题,因为换行符只是控制字符,如果您将多行读入同一字符串中,这种匹配就会起作用。

2010-04-02 22:46:02