2013-05-09 32 views
7

Sto cercando di rilevare parole ridenti come "hahahaha" e "lolololol" in una stringa.Come posso rilevare le parole che ridono in una stringa?

Attualmente sto utilizzando la seguente espressione regolare:

^((.*?)|)(\b[ha]|\b[lo])(.*?)$ 

Tuttavia, questo non funziona per i miei scopi. È funziona, ma combina anche parole totalmente estranee alle risate, come "uccidere", perché cerca semplicemente qualsiasi parola che contenga le lettere l, o, h, a.

Come posso rilevare parole ridere (come "hahaha" o "lololol") in una stringa?

+0

@Jonathan la modifica ha cambiato completamente il significato della domanda .... 'gamehelp16' dovrebbe apportare un cambiamento così drastico nella lingua. – Bill

+1

@ Bill No, ho chiarito il significato esistente della domanda che ti sembra di essere solo in incomprensione. – doppelgreener

+0

@JonathanHobbs Stavo solo facendo un resoconto della domanda posta. Sono d'accordo che "uccidere" essere considerato una "parola ridente" sia strano, ma questo è quello che la domanda ha esplicitamente affermato. – Bill

risposta

6

prova con questo modello:

\b(?:a*(?:ha)+h?|(?:l+o+)+l+)\b 

o meglio se il vostro supporto sapore regex gruppi atomici e quantificatori possessivi:

\b(?>a*+(?:ha)++h?|(?:l+o+)++l+)\b 
+1

Perché tutti i gruppi non di cattura? Regex è già abbastanza difficile da leggere. Li rimuoverei. – Bohemian

+0

Non dimenticare di abbinare hah, hahah, lool, loooooooll, ecc. – Patashu

+0

@Bohemian: Perché non hai bisogno di catturare nulla –

4

\b(a*ha+h[ha]*|o?l+o+l+[ol]*)\b

Partite:

hahahah 
haha 
lol 
loll 
loool 
looooool 
lolololol 
lolololololo 
ahaha 
aaaahahahahahaha 

non corrisponde:

looo 
oool 
oooo 
llll 
ha 
l 
o 
lo 
ol 
ah 
aah 
aha 
kill 
lala 
haunt 
hauha 
louol 
6

Per farla semplice, perché le soluzioni pubblicate possono essere eccessivamente complicato per quello che si vuole fare: se l'unica cosa che conta come "le parole che ridono" sono ha, haha, etc. e lol, lolol, lololol, ecc, quindi la seguente espressione regolare sarà sufficiente:

\b(ha)+|l(ol)+\b 

questo presuppone un dialetto regex in cui \b rappresenta un limite di parola, che ti sembra di essere utilizzato.

+0

+1 Questa è la soluzione più efficace. Mantieni le cose semplici. Sembra che sia nel contesto di un gioco, e i tuoi giocatori capiranno come attivare la reazione di risata del gioco, se lo desiderano. Questo non deve essere un intelligenza artificiale impeccabile. – doppelgreener

+0

Spesso qualcuno digiterà il lolololololool e digiterà la fine, quindi non è una ripetizione perfetta. – Patashu

+0

@Patashu, e se vuole abbinarlo, può usare una delle altre risposte. La mia risposta affronta l'interpretazione più basilare della sua domanda per ragioni di semplicità. – Cairnarvon

Problemi correlati