2016-03-31 25 views
6

Ho una pagina XML che ho una scansione sistema di monitoraggio, ecco i dati di origine:Trattare con segni di discorso con String.match

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

E qui è il codice che ho finora:

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

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

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

local sum = vsize 

sto cercando di indirizzare questo po 'di dati dalla pagina XML:

stats size="0" 

il valore "0" è il numero sono interessato a un Sto cercando un modo per catturare quella figura (indipendentemente da quello che raggiunge) tramite la sceneggiatura.

penso che il mio script è alla ricerca di:

size=0 piuttosto che size="0"

Ma io sono sicuro sulla sintassi corretta su come fare questo.

+3

Usa sfuggito tra virgolette letterali stringa: 'modello locale = "size = \" (% d +) \ "" ' –

+0

Grazie, funziona perfettamente! – greenage

risposta

5

In generale, non è una buona idea utilizzare il modello Lua (o regex) per analizzare XML, utilizzare invece un parser XML.


In ogni caso, in questo esempio,

local pattern = " size=(%d+) " 
  • questioni spazi, quindi lo spazio bianco all'inizio e alla fine sono cercando di abbinare carattere di spazio bianco, ma non è riuscito.
  • Hai già notato che hai bisogno di doppi apici attorno allo (%d), devono essere sfuggiti in stringhe con doppie virgolette.
  • + è avido, potrebbe funzionare qui, ma il non-goloso - è una scelta migliore .

Questo funziona

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

Nota è possibile utilizzare corde singole citazioni in modo che non avete bisogno di sfuggire virgolette doppie:

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