2014-10-09 84 views
7
str = "fa, (captured)[asd] asf, 31" 

for word in str:gmatch("\(%a+\)") do 
    print(word) 
end 

Ciao! Voglio catturare una parola tra parentesi.Come catturare una stringa tra parentesi?

Il mio codice deve stampare la stringa "catturata".

lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\(' 

E ho ottenuto questo errore di sintassi.

Naturalmente, posso solo trovare la posizione di parentesi e utilizzare la funzione string.sub

ma preferisco semplice codice.

Inoltre, le parentesi mi hanno fornito un errore simile.

risposta

8

Il carattere di escape nei modelli Lua è %, non \. Quindi, utilizzare questo:

word=str:match("%((%a+)%)") 

Se avete solo bisogno una corrispondenza, non v'è alcuna necessità di un ciclo gmatch.

Per catturare la stringa tra parentesi quadre, utilizzare un modello simile:

word=str:match("%[(%a+)%]") 

Se la stringa catturata non è interamente costituito da lettere, utilizzare .- anziché %a+.

4

La risposta di lhf probabilmente ti dà quello che ti serve, ma vorrei menzionare un'altra opzione che ritengo sia poco utilizzata e possa funzionare anche per te. Un problema con l'utilizzo di %((%a+)%) è che non funziona per parentesi nidificate: se lo si applica a qualcosa come "(testo (altro) testo", si otterrà "di più" anche se si si aspetta "testo (più) testo". Si noti che non è possibile risolvere il problema chiedendo di abbinare alla parentesi di primo closing (%(([^%)]+)%)), in quanto vi darà "il testo (più".

Tuttavia, è possibile utilizzare %bxy pattern item, che bilancia x e y occorrenze e volontà restituire (text(more)text) in questo caso (è necessario utilizzare qualcosa come (%b()) per catturarlo). Ancora una volta, questo potrebbe essere eccessivo per il tuo caso, ma utile da tenere a mente e può aiutare qualcun altro che si imbatte in questo problema

+1

+1, questa era la mia risposta originale :) :) – lhf

+0

Grazie per ulteriori informazioni. e il tuo Lua IDE è fantastico! –