Un par de problemas de coincidencia de patrones con la coincidencia de patrones en Lua

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

  •  24-09-2019
  •  | 
  •  

Pregunta

He estado trabajando en un pronosticador del tiempo para un programa que yo uso, y está funcionando bien, en su mayor parte. Aquí es lo que tengo hasta ahora. (No preste atención a la zs.stuff. Eso es específica del programa y no tiene relación con la codificación de 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>")

Mi principal problema es la siguiente: He cambiado la 'condición' y ha añadido las variables 'imagen' de lo que son ahora. A pesar de que la línea se supone que debe ser coincidente viene directamente de la página web, que no coincide en absoluto. Así que me pregunto qué es lo que me falta eso está impidiendo el código de trabajo. Si saco la
    <td class="vaM taC"> que va coincide con la condición sin problemas. (Por alguna razón, no puedo conseguir la línea anterior para mostrar correctamente, pero no hay espacio entre el `

puede señalar a nadie lo que está mal con ella? Aparte de la coincidencia de patrones, les aseguro que la línea está textualmente de la página web.

Otra pregunta que tengo es la capacidad de emparejar a través de los saltos de línea. ¿Hay alguna forma posible de hacer esto? La razón por la que pido es porque en esa misma página, algunas de las cosas que necesito partido se divide en líneas separadas, y puesto que el patrón real que estoy queriendo hacer coincidir aparece en otros lugares en la página, lo que necesito ser capaz de igualar a través de saltos de línea para obtener el patrón exacto.

¿Fue útil?

Solución

Puede simplificar su partido considerablemente (ver más abajo), pero en general parece que tienes dos problemas ...

  • Falta la () en todo el partido desea capturar.
  • Usted necesita para escapar de la. personajes de su partido al hacerlos%.

He intentado esto y funcionó ...

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)

este impreso ...

hello_world    HELLO WORLD

En cuanto a varias líneas, eso no debería ser un problema, los saltos de línea son caracteres de control y si sólo se lee en varias líneas en la misma cadena de esta obra de partido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top