2013-03-07 10 views
7

Sono solo nuovo di lua ... e quindi mi scuso se mi manca qualcosa di base.
Sto facendo un semplice test per vedere se riesco a trovare determinati valori in una stringa.perché lua string.find restituisce true per questo test case?

Ecco il codice:

print(string.find('[email protected]','.')) 

invece di fallire, che è quello che mi aspettavo, mi sto di nuovo:

mymachinename:/usr/share/std/test# lua test.lua 
1  1 

Potete dirmi dove sto andando male? Grazie.

+1

duplicato? http://stackoverflow.com/questions/15258313/finding-with-string-find –

risposta

6

Questo perché in Lua il metodo find cerca un modello e . represents any character.

È possibile utilizzare i set di caratteri per aggirare il problema:

print(string.find('[email protected]','[.]')) 

Ecco un link to a small demo.

+2

È più facile usare '%' come carattere di escape, simile all'utilizzo della barra rovesciata nelle espressioni regolari: 'print (string.find (' fd @ testca ','%. ')) ' –

+0

@KeithThompson Che bello sapere, grazie! Sono solo un utente occasionale di Lua, quindi la mia conoscenza è piuttosto limitata sui dettagli. – dasblinkenlight

+0

@KeithThompson Personalmente ritengo che sia una questione di gusti. Quando si tratta di simboli di escape come parentesi, trovo '[(]' e '[)]' molto più leggibile di '% (' e '%)' - specialmente quando è interlacciato con parentesi di raggruppamento effettive. L'uso di una classe di caratteri per sfuggire a un singolo personaggio crea un quadratino piacevole che è facilmente riconoscibile in un modello più lungo, e inoltre non è il "centro" di un carattere (in '% (' l'informazione effettiva è giusta al centro di quello che sto guardando) - Penso che sia di grande aiuto nell'individuare parentesi tonde e simili –

3

Lua utilizza i modelli (descritti here) per la ricerca. Puoi disattivare i pattern con il quarto parametro opzionale:

print(string.find('[email protected]','.', 1, true)) 

Il terzo parametro opzionale (1) è la posizione di partenza.

+0

No, Lua non usa espressioni regolari, usa * schemi *, [descritti qui] (http: // www. lua.org/pil/20.2.html) (perché l'implementazione usa molto meno codice) –

+0

@KeithThompson: Scusa, stavo parafrasando dal wiki di lua-users: "Disattiva la funzione di espressione regolare usando il quarto argomento opzionale" plain "." Indipendentemente da ciò, il quarto parametro booleano consente una ricerca in testo semplice – Corey

+0

Ho appena corretto il wiki (e la tua risposta). –

Problemi correlati