2016-03-31 14 views
6

Ich habe eine XML-Seite, dass ich ein Monitoring-System Scannen haben, hier ist die Quelle Daten:Umgang mit Sprachmarken mit string.match

`<queues> 
<queue name="workQueue"> 
<stats size="0" consumerCount="28" enqueueCount="29320" dequeueCount="37000"/> 

Und hier ist der Code, den ich habe bisher:

local pattern = " size=(%d+) " 

local a = alarm.get("CO13974960-19518") 

local vsize = string.match(a.message, pattern) 

local sum = vsize 

ich versuche, dieses Bit von Daten aus der XML-Seite zum Ziel:

stats size="0" 

der Wert „0“ ist die Zahl ich bin an, ein Und ich suche nach einer Möglichkeit, diese Figur (egal was sie erreicht) über das Skript zu erfassen.

Ich glaube, mein Skript für sucht:

size=0 statt size="0"

Aber ich bin nicht sicher, auf der richtigen Syntax, wie dies zu tun.

+3

Verwenden Anführungszeichen innerhalb Stringliterale entkommen: 'lokale pattern = "size = \" (% d +) \ "" ' –

+0

Danke, das funktioniert perfekt! – greenage

Antwort

5

Im Allgemeinen ist es keine gute Idee, Lua-Muster (oder Regex) zu verwenden, um XML zu analysieren, stattdessen einen XML-Parser zu verwenden.


Wie auch immer, in diesem Beispiel

local pattern = " size=(%d+) " 
  • Leer Angelegenheiten, so den Leerraum am Anfang und Ende sind versuchen weiße Leerzeichen passen, aber fehlgeschlagen.
  • Sie haben bereits bemerkt, dass Sie doppelte Anführungszeichen um (%d) benötigen, sie müssen in doppelt zitierten Strings maskiert werden.
  • + ist gierig, könnte es hier funktionieren, aber die nicht-gierige ist eine bessere Wahl.

Dies funktioniert

local pattern = "size=\"(%d-)\"" 

Hinweis Sie einfache Anführungszeichen Strings verwenden könnte, so dass Sie doppelte Anführungszeichen nicht entkommen müssen:

local pattern = 'size="(%d-)"'