Quelques problèmes de correspondance de motif avec correspondance de motif dans Lua

StackOverflow https://stackoverflow.com/questions/2569496

  •  24-09-2019
  •  | 
  •  

Question

Je travaille sur un prévisionniste pour un programme que je l'utilise, et cela fonctionne bien, pour la plupart. Voici ce que j'ai jusqu'à présent. (Ne faites pas attention à la zs.stuff. Ce programme spécifique est et n'a aucune incidence sur le codage 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>&nbsp;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="&deg;F" metric="&deg;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>")

Ma question principale est la suivante: j'ai changé la « condition » et a ajouté des variables « l'image » à ce qu'ils sont maintenant. Même si la ligne, il est censé être correspondant provient directement de la page Web, il ne correspond pas du tout. Je me demande donc ce qu'il est je manque que ce code empêche des de travailler. Si je prends le
    <td class="vaM taC"> il va parfaitement correspondre à l'état. (Pour une raison quelconque, je ne peux pas obtenir la ligne ci-dessus pour afficher correctement, mais il n'y a pas d'espace entre le `

Quelqu'un peut-il signaler ce qui ne va pas avec elle? Mis à part la correspondance de motif, je vous assure que la ligne est mot pour mot de la page Web.

Une autre question que j'avais est la capacité de faire correspondre entre les sauts de ligne. Est-il possible possible de le faire? La raison pour laquelle je demande est parce que sur cette même page, quelques-unes des choses que je dois correspondre sont brisés sur des lignes distinctes, et puisque le motif réel que je suis désireux de faire correspondre apparaît dans d'autres endroits sur la page, j'ai besoin pour être en mesure de faire correspondre dans les sauts de ligne pour obtenir le modèle exact.

Était-ce utile?

La solution

Vous pouvez simplifier considérablement votre match (voir ci-dessous), mais en général, il semble que vous avez deux problèmes ...

  • manque le () autour du match que vous souhaitez capturer.
  • Vous devez échapper à la. caractères dans votre correspondance en les rendant%.

J'ai essayé et ça a marché ...

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)

imprimé ...

hello_world    HELLO WORLD

comme pour multiligne, cela ne devrait pas être un problème, les sauts de ligne sont le contrôle juste des caractères et si vous avez lu dans plusieurs lignes dans la même chaîne fonctionne ce match.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top