PDA

View Full Version : [REGEX] indipendenza da ordine elementi


dupa
16-01-2008, 12:10
Sono incasinato con una regex.

Voglio matchare cose tipo:

ciao luca giovanni mario
ciao luca giovanni
ciao mario

fino a qui farei:

ciao( luca)?( giovanni)?( mario)?

il problema è che voglio anche matchare eventuali ordini invertiti, es:
ciao giovanni luca

Sapete qual'è il comando per far ciò?
Grazie!

kk3z
16-01-2008, 13:14
Puoi matchare le parole e controllare dopo se corrispondono:
ciao(\s\w+)?(\s\w+)?(\s\w+)?

dupa
16-01-2008, 20:39
Puoi matchare le parole e controllare dopo se corrispondono:
ciao(\s\w+)?(\s\w+)?(\s\w+)?

in un colpo non si può fare?

kk3z
16-01-2008, 23:03
ciao\s?(luca|giovanni|mario)?\s?(luca|giovanni|mario)?\s?(luca|giovanni|mario)?

dupa
17-01-2008, 11:52
ciao\s?(luca|giovanni|mario)?\s?(luca|giovanni|mario)?\s?(luca|giovanni|mario)?

temo che nel caso in cui sia più di tre i termini non diventi molto fattibile :)

Angus
17-01-2008, 13:08
Quello che vuoi fare non è possibile nel dominio delle espressioni regolari, ti servono le grammatiche ergo ti serve un parser. Altrimenti te la smazzi "a manina" come già suggerito :sofico:

ps: sono passati anni dallo studio dell'argomento e potrei aver detto una @##@#

kingv
17-01-2008, 15:33
ciao\s?(luca|giovanni|mario)?\s?(luca|giovanni|mario)?\s?(luca|giovanni|mario)?

così fa il match anche di:

ciao lucamariogiovanni

puoi modificarla in:

ciao(\s(luca|giovanni|mario)){1,3}