2013-05-09 9 views
7

Ich versuche, lachende Wörter wie "hahahaha" und "lolololol" in einer Zeichenfolge zu erkennen.Wie kann ich lachende Wörter in einer Zeichenfolge erkennen?

Derzeit verwende ich die folgende regex:

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

Dies ist jedoch nicht für meine Zwecke funktioniert. Es funktioniert funktioniert, aber es passt auch Wörter, die nichts mit Lachen zu tun haben, wie "töten", weil es einfach nach einem Wort sucht, das die Buchstaben l, o, h, a enthält.

Wie kann ich lachende Wörter (wie "hahaha" oder "lololol") in einer Zeichenfolge erkennen?

+0

@ Jonathan Ihre Bearbeitung hat die Bedeutung der Frage total verändert .... 'gamehelp16' sollte so eine drastische Änderung in der Sprache machen. – Bill

+1

@Bill Nein, ich habe die bestehende Bedeutung der Frage geklärt, die Sie in Missverständnissen allein zu sein scheinen. – doppelgreener

+0

@ JonathanHobbs Ich habe gerade einen Wörtchen mit der gestellten Frage gemacht. Ich stimme zu, dass "töten" als ein "lachendes Wort" betrachtet wird, ist seltsam, aber das ist, was die Frage ausdrücklich gesagt hat. – Bill

Antwort

6

versuchen mit diesem Muster:

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

oder besser, wenn Ihre regex Geschmack Unterstützung Atom-Gruppen und possessive Quantoren:

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

Warum alle nicht einfangenden Gruppen? Regex ist schon schwer genug, um schon zu lesen. Ich würde sie entfernen. – Bohemian

+0

Vergessen Sie nicht, hah, hahah, lool, loooooooll, etc. – Patashu

+0

@Bohemian: Weil Sie nichts erfassen müssen –

4

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

Spiele:

hahahah 
haha 
lol 
loll 
loool 
looooool 
lolololol 
lolololololo 
ahaha 
aaaahahahahahaha 

Keine Übereinstimmung:

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

es einfach zu halten, weil die entsandten Lösungen übermäßig für kompliziert sein kann, was Sie tun wollen: Wenn das einzige, was zählt man als „Lachen Worte“ sind ha, haha usw. und lol, lolol, lololol usw., dann wird der folgende reguläre Ausdruck wird ausreichen, um:

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

Dies setzt voraus, einen regulären Ausdruck Dialekt, in dem \b eine Wortgrenze darstellt, die Sie scheinen zu verwenden.

+0

+1 Dies ist die effektivste Lösung. Halte die Dinge einfach. Das klingt wie im Kontext eines Spiels und Ihre Spieler werden verstehen, wie sie die Lachreaktion des Spiels auslösen können, wenn sie es wollen. Dies muss keine makellose Humor-Detection AI sein. – doppelgreener

+0

Oft wird jemand lolololololool und Typo das Ende tippen, so ist es nicht eine perfekte Wiederholung, obwohl. – Patashu

+0

@Patashu, und wenn er das übereinstimmen möchte, kann er eine der anderen Antworten verwenden. Meine Antwort geht der Einfachheit halber auf die grundlegendste Interpretation seiner Frage ein. – Cairnarvon

Verwandte Themen