زوجان من المشكلات المطابقة للأنماط مع مطابقة الأنماط في لوا

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

  •  24-09-2019
  •  | 
  •  

سؤال

لقد كنت أعمل على تنبؤات الطقس لبرنامج أستخدمه ، وهو يعمل بشكل جيد ، بالنسبة للجزء الأكبر. هذا ما لدي حتى الآن. (لا تهتم بـ 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>&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>")

مشكلتي الرئيسية هي: لقد غيرت "الحالة" وأضفت متغيرات "الصورة" إلى ما هي عليه الآن. على الرغم من أن الخط الذي يفترض أن يكون مطابقًا يأتي مباشرة من صفحة الويب ، إلا أنه فشل في مطابقة على الإطلاق. لذلك أنا أتساءل ما الذي أفتقده ، مما يمنع هذا الرمز من العمل. إذا أخرجت
<td class="vaM taC"><img src = "http://icons-ecast.wxug.com/i/c/a/ budaper_w_00.
سوف تطابق حالة لا تشوبه شائبة. (لأي سبب من الأسباب ، لا يمكنني الحصول على السطر أعلاه لعرضه بشكل صحيح ، ولكن لا توجد مساحة بين `<و 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)

هذه مطبوعة ...

hello_world    HELLO WORLD

بالنسبة إلى Multiline ، لا ينبغي أن يكون ذلك مشكلة ، فإن الخطوط الجديدة هي مجرد أحرف التحكم وإذا قرأت في أسطر متعددة في نفس السلسلة التي تعمل هذه المطابقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top