如何检测字符串中的笑话?

gam*_*p16 8 regex pattern-matching

我试图在字符串中检测出像"哈哈哈哈"和"洛丽奥尔"这样的笑话.

目前我正在使用以下正则表达式:

^((.*?)|)(\b[ha]|\b[lo])(.*?)$
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于我的目的.它有效,但它也匹配与笑声完全无关的词,例如'kill',因为它只是寻找包含字母l,o,h,a的任何单词.

如何在字符串中检测笑话(如"hahaha"或"lololol")?

Cas*_*yte 6

尝试这种模式:

\b(?:a*(?:ha)+h?|(?:l+o+)+l+)\b
Run Code Online (Sandbox Code Playgroud)

或者更好,如果你的正则表达式支持原子组和占有量词:

\b(?>a*+(?:ha)++h?|(?:l+o+)++l+)\b
Run Code Online (Sandbox Code Playgroud)


Pat*_*shu 6

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

火柴:

hahahah
haha
lol
loll
loool
looooool
lolololol
lolololololo
ahaha
aaaahahahahahaha
Run Code Online (Sandbox Code Playgroud)

不匹配:

looo
oool
oooo
llll
ha
l
o
lo
ol
ah
aah
aha
kill
lala
haunt
hauha
louol
Run Code Online (Sandbox Code Playgroud)


Cai*_*von 6

为了保持它的简单,因为发布的解决方案可能是你想要做什么过于复杂:如果算上唯一的"笑的话"是ha,haha等,lol,lolol,lololol,等,那么下面的正则表达式会足够:

\b(ha)+|l(ol)+\b
Run Code Online (Sandbox Code Playgroud)

这假设一个正则表达式方言,其中\b表示您似乎正在使用的单词边界.