2013-05-09 5 views
7

मैं एक स्ट्रिंग में "हाहाहाहा" और "लॉोलोलोल" जैसे हंसते हुए शब्दों का पता लगाने की कोशिश कर रहा हूं।मैं स्ट्रिंग में हंसी वाले शब्दों का पता कैसे लगा सकता हूं?

वर्तमान में मैं निम्नलिखित regex उपयोग कर रहा हूँ:

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

बहरहाल, यह मेरी प्रयोजनों के लिए काम नहीं करता। यह काम करता है, लेकिन यह 'मार' जैसी हंसी से पूरी तरह से असंबंधित शब्दों से मेल खाता है, क्योंकि यह केवल किसी भी शब्द की तलाश करता है जिसमें अक्षर एल, ओ, एच, ए शामिल है।

मैं एक स्ट्रिंग में हंसते हुए शब्दों (जैसे "हाहाहा" या "लॉलोलोल") का पता कैसे लगा सकता हूं?

+0

@ जोनाथन ने आपके संपादन को पूरी तरह से प्रश्न का अर्थ बदल दिया है .... 'gamehelp16' को भाषा में इतना कठोर परिवर्तन करना चाहिए। – Bill

+1

@ बिल नहीं, मैंने इस प्रश्न के मौजूदा अर्थ को स्पष्ट किया है जो आप गलतफहमी में अकेले दिखते हैं। – doppelgreener

+0

@ जोनाथन हॉब्स मैं सिर्फ पूछे गए सवाल का एक शब्दशः कर रहा था। मैं मानता हूं कि 'मारने' को 'हंसते हुए शब्द' के रूप में माना जा रहा है, लेकिन यह सवाल स्पष्ट रूप से कहा गया है। – Bill

उत्तर

6

इस पैटर्न के साथ प्रयास करें:

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

या बेहतर अगर आपके regex स्वाद समर्थन परमाणु समूहों और अधिकार परिमाणकों:

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

सभी गैर-कैप्चरिंग समूह क्यों? Regex पहले से पढ़ने के लिए काफी मुश्किल है। मैं उन्हें हटा दूंगा। – Bohemian

+0

हां, हाहा, लूल, लोयूयूओल, आदि से मेल न भूलें – Patashu

+0

@ बोहेमियन: क्योंकि आपको कुछ भी –

4

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

से मेल खाता है:

hahahah 
haha 
lol 
loll 
loool 
looooool 
lolololol 
lolololololo 
ahaha 
aaaahahahahahaha 

से मेल खाता है नहीं:

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

इसे सरल रखने के लिए, क्योंकि समाधान तैनात कि आप क्या करना चाहते हैं के लिए बहुत ज्यादा जटिल हो सकता है: अगर केवल एक चीज आप गिनती के रूप में "हँस शब्द" कर रहे हैं ha, haha, आदि और lol, lolol, lololol, आदि, उसके बाद निम्न नियमित अभिव्यक्ति के लिए पर्याप्त होगा:

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

यह एक regex बोली जिसमें \b एक शब्द सीमा है, जो आप ज़रिये जुड़े हुए हैं का प्रतिनिधित्व करता है मान लिया गया है।

+0

+1 यह सबसे प्रभावी समाधान है। चीजों को सरल रखें। ऐसा लगता है कि यह किसी गेम के संदर्भ में है, और आपके खिलाड़ी समझेंगे कि गेम की हंसते हुए प्रतिक्रिया को ट्रिगर करने के तरीके को कैसे ट्रिगर करना है। यह एक निर्दोष हास्य-पहचान एआई होना जरूरी नहीं है। – doppelgreener

+0

अक्सर कोई लॉलोलोलोलोलूल टाइप करेगा और अंत टाइप करें ताकि यह एक पूर्ण दोहराव न हो। – Patashu

+0

@ पट्टाशू, और यदि वह उससे मेल खाना चाहता है, तो वह अन्य उत्तरों में से एक का उपयोग कर सकता है। मेरा जवाब सादगी के लिए अपने प्रश्न की सबसे बुनियादी व्याख्या को संबोधित करता है। – Cairnarvon

संबंधित मुद्दे