2013-05-09 6 views
7

Tôi đang cố gắng phát hiện các từ cười như "hahahaha" và "lolololol" trong một chuỗi.Làm cách nào để phát hiện các từ cười trong chuỗi?

Hiện nay tôi đang sử dụng regex sau:

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

Tuy nhiên, điều này không làm việc cho mục đích của tôi. Nó hoạt động, nhưng nó cũng phù hợp với các từ hoàn toàn không liên quan đến tiếng cười, chẳng hạn như 'giết', bởi vì nó chỉ đơn giản là tìm kiếm bất kỳ từ nào có chứa các chữ cái l, o, h, a.

Làm cách nào để phát hiện các từ cười (như "hahaha" hoặc "lololol") trong chuỗi?

+0

@ Jonathan sửa đổi của bạn đã hoàn toàn thay đổi ý nghĩa của câu hỏi .... 'gamehelp16' nên thực hiện một thay đổi mạnh mẽ trong ngôn ngữ. – Bill

+1

@ Không, tôi đã làm sáng tỏ ý nghĩa hiện tại của câu hỏi mà bạn dường như là một mình trong sự hiểu lầm. – doppelgreener

+0

@JonathanHobbs Tôi chỉ đang thực hiện một nguyên văn của câu hỏi được hỏi. Tôi đồng ý 'giết' được coi là một' từ cười 'là lạ, nhưng đây là câu hỏi được nêu rõ. – Bill

Trả lời

6

thử với mô hình này:

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

hoặc tốt hơn nếu regex hương vị hỗ trợ các nhóm nguyên tử của bạn và quantifiers sở hữu:

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

Tại sao tất cả các nhóm không bắt được? Regex là khó đủ để đọc rồi. Tôi sẽ loại bỏ chúng. – Bohemian

+0

Đừng quên kết hợp hah, hahah, lool, loooooooll, v.v. – Patashu

+0

@Bohemian: Vì bạn không cần chụp bất kỳ thứ gì –

4

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

Matches:

hahahah 
haha 
lol 
loll 
loool 
looooool 
lolololol 
lolololololo 
ahaha 
aaaahahahahahaha 

Không phù hợp:

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

Để giữ cho nó đơn giản, bởi vì các giải pháp được đăng có thể quá phức tạp cho những gì bạn muốn làm: nếu điều duy nhất bạn được tính là "lời nói cười" là ha, haha vv và lol, lolol, lololol, vv, thì biểu thức chính quy sau đây sẽ là đủ:

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

này giả định một phương ngữ regex trong đó \b đại diện cho một ranh giới từ, mà bạn đang sử dụng.

+0

+1 Đây là giải pháp hiệu quả nhất. Giữ mọi thứ đơn giản. Điều này nghe có vẻ như trong ngữ cảnh của trò chơi và người chơi của bạn sẽ hiểu cách kích hoạt phản ứng cười của trò chơi nếu họ muốn. Đây không phải là một AI phát hiện hài hước hoàn hảo. – doppelgreener

+0

Thường thì một người nào đó sẽ gõ lolololololool và đánh máy cuối cùng vì vậy nó không phải là một sự lặp lại hoàn hảo, mặc dù. – Patashu

+0

@Patashu, và nếu anh ta muốn kết hợp điều đó, anh ta có thể sử dụng một trong những câu trả lời khác. Câu trả lời của tôi giải thích sự giải thích cơ bản nhất về câu hỏi của anh ta vì mục đích đơn giản. – Cairnarvon