2016-04-27 13 views
0

Ich versuche, all First-Level-Tags unter head-Tag einer HTML-Antwort verschachtelt, um durch meinen Reverse-Proxy gehen. Ich lasse nginx + lua laufen, also wäre die Lösung in Bezug auf Lua-Mustervergleich großartig ...Lua Passender erste Ebene Tags in <head>

Jetzt bin ich string_() das Innere von head tag, dann iteriere über die verschachtelten Tags und füge sie hinzu einer nach dem anderen auf den Tisch:

local headOnly = string.sub(wholeHtmlResponse, startHead, endHead) 
local tags = {} 
for tag in string.gmatch(headOnly, '(<[^<>]*>)') do 
    tags[#tags+1]=tag 
end 

ich dann über die "Tags" table laufen, alle nicht-First-Level-Tags zu entfernen. Ich bin nicht an irgendwelchen Argumenten oder dem Inhalt innerhalb der Tags interessiert, nur an den Tags selbst. Wir sprechen über Live-Anfragen und ich bin besorgt, dass dies hässlich langsam werden kann, wenn der Kopf der Anfrage groß genug ist. So

Ich habe ein paar ähnliche Fragen:

  • Ist string.gmatch effizient genug?
  • Gibt es eine Möglichkeit/Modul dies effizienter zu machen?
  • Soll ich mein eigenes Modul betrachten zu schreiben?

Jede Eingabe zu schätzen!

+0

nicht sicher, welche Ausgabe Sie haben. Wenn der Code für Sie in Ordnung ist, würden Sie ihn lieber unter [codereview.se] posten. –

+0

Ich bin mir selbst noch nicht sicher, ob das funktionieren würde. Versuchen, es zu vermeiden, es später neu zu schreiben, sozusagen für die Zukunft zu planen. Werde deinen Vorschlag versuchen! –

+0

Nur zur Info: Poste nur bei der Code-Überprüfung, wenn du sicher bist, dass dein Code tatsächlich funktioniert. Wenn Sie sich nicht sicher sind, veröffentlichen Sie bitte ein [MVCE (minimum complete verifable example)] (http://stackoverflow.com/help/mcve) für uns, um das Problem zu lösen. –

Antwort

0

Ist string.gmatch effizient genug?

Sie können diese Frage selbst beantworten, indem Sie Tests ausführen, die zu Ihrem Anwendungsfall passen. Es ist unwahrscheinlich, dass eine allgemeine Antwort Ihnen helfen wird.

Gibt es einen Weg/Modul, dies effizienter zu tun?

Vielleicht, aber das hängt wieder davon ab, was Sie versuchen zu tun. Wenn Sie nach einem bestimmten Tag suchen, ist es wahrscheinlich schneller, nach diesem bestimmten Tag zu suchen, anstatt alle Tags zu analysieren und zu speichern und dann zu überprüfen. Sie können auch früher abbrechen, wenn Ihre Bedingung durch ein frühes Spiel erfüllt wird.