Erste Schritte Regular Expression

Dimax

Top Contributor
Guten Tag,
ich lerne gerade regex und versuche eins zu erstellen ,dass klappt aber nicht.
Ich muss ein Wort zmb. "IF" in einem Text finden und zusammenzahlen wie oft .
Das Wort kann auf eine beliebige Stelle im Satz stehen darf aber nicht ein Teil des anderen Wortes sein.
Mein Versuch :

Java:
public static int counter(String gesucht,String text) {
    int zahl=0;
    Pattern p=Pattern.compile("^\\w"+gesucht+"\\b|\\s"+gesucht+"\\w\\b");
    Matcher m=p.matcher(text);
    while(m.find()) {
        zahl++;
    }
Gibt keinen Fehler aus findet aber auch nichts.
Danke im Voraus.
 
Danke,hab geändert auf
Java:
Pattern p=Pattern.compile("^\\b"+gesucht+"\\b|\\s"+gesucht+"\\b");

und das hat gezählt,muss nur noch prüfen ob das Ergebnis stimmt.
 
Hab getestet
das Muster
Code:
Pattern p=Pattern.compile("^\\b"+gesucht+"\\b|\\s"+gesucht+"\\b");
zählt "%gesucht" nicht,
das Muster
Code:
Pattern p=Pattern.compile("\\b"+gesucht+"\\b");
zählt "%gesucht" mit.
 
hab mich für das Muster entschieden:
Code:
Pattern p=Pattern.compile("^"+gesucht+"\\s|\\s"+gesucht+"\\s|\\s"+gesucht+"\\z");
 
Das erkennt kein Wort an einem Satzende.
Ich verstehe nicht, wieso du nicht einfach "\\b"+gesucht+"\\b" nimmst.
Dein Beispiel mit "fox" innerhalb von "%fox" suchen funktioniert doch... Er finde "fox" innerhalb von "%fox".

Die Character-Klasse \b matched auf allen Übergängen eines als \w und eines als \W matchenden Zeichens.
 
was soll das heißen?
also das Muster mit \\b passt nicht ,weil ich muss wirklich nur die Wörter zusammenzählen ,die keine Zeichen enthalten.
zmb. %IF brauche ich nicht ,und IF% auch nicht,nur die IF .
3 Varianten von Treffern:
1.Das gesuchte Wort steht am Anfang eines Satzes ,ohne allen möglichen Sonderzeichen und dann folgt leeres Platz,
2.Vor dem gesuchten Wort steht Leerzeichen und nach danach Leerzeichen.
3.Vor dem gesuchten Wort steht Leerzeichen und danach Satzende.
 
Zuletzt bearbeitet:
könnte mir jemand vielleicht helfen den regex so modifizieren das er nach dem
\\s"+gesucht+"\\s wenns '=' kommt nicht zusammenzählt?
 
Ich würde hier mit lookbehind und lookahead arbeiten, damit wirklich nur der match auf das gesucht passiert:
(?<=^|\s)gesucht(?=\s++[^=]|\s*$)
 

Neue Themen


Zurück
Oben