2010-12-13 24 views
2

J'ai besoin de construire une regex pour faire correspondre les slangs (ie lol, lmao, imo, etc.) et les émoticônes (ie :),: P,;), etc...). J'ai suivi l'exemple de http://www.coderanch.com/t/497238/java/java/Regular-Expression-Detecting-Emoticons. Cependant, cette méthode/approche échoue pour moi. Par exemple, disons que je dois faire correspondre l'argot "od". Je crée un motif comme suit. Modèle de motif = Pattern.compile (Pattern.quote ("od")); Disons que je dois faire correspondre l'argot "od" dans la phrase de test suivante, "certaines méthodes sont mauvaises." empiriquement, il y a une correspondance sur le mot "méthodes" dans la chaîne, ce qui n'est pas ce que je veux. J'ai lu quelques unes des javadoc et une partie du tutoriel concernant java et regex, mais je n'arrive toujours pas à le comprendre. En passant, j'utilise Java 6 (bien que j'ai regardé et référencé le doc api de java 5).comment construire une expression régulière (regex) pour les argots et les émoticônes

Si regex n'est pas la meilleure solution, je suis également ouvert à d'autres solutions. merci d'avance pour toute aide/pointeurs. le code suivant m'obtient 3 correspondances et est basé sur le lien ci-dessus.

String regex = "od"; 
Pattern pattern = Pattern.compile(Pattern.quote(regex)); 
String str = "some methods are bad od od more text"; 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    System.out.println(matcher.group()); 
} 

le code suivant ne renvoie aucune correspondance et est basé sur les réponses jusqu'à présent. Après les deux réponses utiles ci-dessous, je posterai l'extrait de code correct/désiré ici.

String regex = "(\\bod\\b)|(\\blmao\\b)"; 
Pattern pattern = Pattern.compile(regex); 
String str = "some methods are bad od od more text lmao more text"; 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    System.out.println(matcher.group()); 
} 

ce code est correct ou comme on le souhaite car empiriquement, il me donne 3 correspondances (2 od et 1 lmao). désolé, je voudrais être plus fort avec regex en utilisant java (et juste regex en général). Merci de votre aide.

+0

Ne faites correspondre les émoticônes que si elles sont suivies et précédées d'un espace, d'une ponctuation, d'un début de ligne ou d'une fin de ligne. – Cam

+0

dois-je passer cette regex par Pattern.quote (String str)? – jake

Répondre

1

Vous pouvez utiliser les limites de mots (\b) afin de faire correspondre un mot à à l'argot que vous voulez. Par exemple, le modèle "\bod\b" correspondra à "od", mais ne correspondra pas à "méthode". Par exemple, le modèle "\bod\b" correspondra à "od".

+0

J'ai essayé "\ bod \ b" et "\ bod" et les deux échouent. – jake

+0

Comment ça "échoue"? Et comment les entrez-vous?Si c'est directement dans votre code Java, vous devrez à nouveau échapper aux barres obliques inverses - '" \\ bod \\ b "' (si vous ne le faites pas, Java pensera qu'il s'agit d'un caractère backspace au lieu d'un backslash suivi de ab) –

+0

ok, vous avez raison. Merci. la regex est directement dans mon code java. dans la méthode deux ci-dessus, après l'avoir modifié en String regex = "\\ bod \\ b", alors cela fonctionne. Je voterais tous les deux, mais je ne peux pas puisque je suis un n00b, jeu de mots. laissez-moi ajouter le bon code. – jake

2

[:;] -?: Ou ":" [DP()]

gère les combinaisons de "" "-" plus non plus et "D" ou "P" ou ")" ou « ("
par exemple:.? P :-(, D etc ...

simplement ajouter d'autres combinaisons ...

have fun ..

1

avez-vous besoin d'utiliser un regex je voudrais faire

String str = "some methods are bad od od more text lmao more text"; 
String[] words = str.Split(" "); 
for (String s : words) { 
    if (s.Equals("od") || s.Equals("lamo")) 
    System.out.println(s); 
}