2010-12-13 1 views
2

Ich muss eine Regex erstellen um Slangs (dh lol, lmao, imo, etc ..) und Emoticons (dh :),: P,;), etc...).Wie man einen regulären Ausdruck (regex) für Slangs und Emoticons erstellt

Ich folgte dem Beispiel bei http://www.coderanch.com/t/497238/java/java/Regular-Expression-Detecting-Emoticons. Allerdings versagt diese Methode/Vorgehensweise für mich.

zum Beispiel, sagen wir, ich muss den Slang "od" entsprechen. Ich erstelle ein Muster wie folgt. Muster pattern = Pattern.compile (Pattern.quote ("od"));

Lassen Sie uns sagen, ich muss den Slang "od" im folgenden Testsatz übereinstimmen, "einige Methoden sind schlecht." empirisch gibt es eine Übereinstimmung mit dem Wort "Methoden" in der Zeichenfolge, die nicht das ist, was ich will.

Ich habe einige der Javadoc und einige der Tutorial in Bezug auf Java und Regex gelesen, aber ich kann immer noch nicht herausfinden.

Übrigens benutze ich Java 6 (obwohl ich die Java 5 API doc angeschaut und darauf verwiesen habe).

Wenn Regex nicht der beste Weg zu gehen ist, bin ich für andere Lösungen geöffnet. Danke im Voraus für jede Hilfe/Hinweise. Der folgende Code bringt mir 3 Treffer und basiert auf dem obigen Link.

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()); 
} 

Der folgende Code gibt keine Übereinstimmungen zurück und basiert auf den Antworten bisher.

nach den zwei hilfreiche Antworten unten, werde ich das richtige/gewünschte Code-Snippet hier posten.

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()); 
} 

dieser Code korrekt ist oder wie da empirisch erwünscht, es gibt mir 3 Ergebnisse (2 od und 1 lmao). Entschuldigung, ich wünschte, ich wäre stärker mit Regex mit Java (und nur Regex im Allgemeinen). danke für Ihre Hilfe.

+0

Passen Sie die Emoticons nur an, wenn ihnen ein Leerzeichen, eine Interpunktion, ein Zeilenanfang oder ein Zeilenende gefolgt wird. – Cam

+0

Muss ich diesen Regex durch Pattern.quote (String str) übergeben? – jake

Antwort

1

Sie können Wortgrenzen (\b) verwenden, um ein Wort zu finden, das nur der Slang ist, den Sie wollen.

So wird zum Beispiel das Muster "\bod\b" "od" übereinstimmen, aber nicht "Methode" übereinstimmen.

+0

ich versuchte "\ bod \ b" und "\ bod" und beide fehlgeschlagen. – jake

+0

Wie "versagt" es? Und wie gibst du diese ein?Wenn es direkt in Ihrem Java-Code ist, müssen Sie die umgekehrten Schrägstriche wieder entzweien - '" \\ bod \\ b "' (Wenn Sie dies nicht tun, wird Java denken, dass es ein Backspace-Zeichen anstelle eines Backslash gefolgt von ab ist) –

+0

ok, du hast Recht. Vielen Dank. Die Regex ist direkt in meinem Java-Code. in der obigen Methode zwei, nach dem Ändern in String Regex = "\\ bod \\ b", dann funktioniert es. Ich würde beide von euch wählen, aber ich kann nicht, weil ich ein n00b bin, Wortspiel beabsichtigt. Lass mich den richtigen Code hinzufügen. – jake

2

[:;] - [DP()]

behandelt die Kombinationen von ":" oder ":" plus entweder "-" und "D" oder "P" oder ")" oder „("
zB:.? P :-(; D etc ...

nur mehr Kombinationen hinzufügen ...

Spaß haben ..

1

benötigen Sie einen regulären Ausdruck zu verwenden, würde ich tun

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); 
} 
Verwandte Themen