Reguläre Ausdrücke

philBerlin

Mitglied
Hallo hallo,

ich hab eine Frage zu regulären Ausdrücken. Ich suche nach einer Sequenz die nicht kontinuierlich ist. Dabei wird nach einem x und einem y gesucht, dazwischen kann eine beliebige Zeichenfolge auftreten. Mit der folgenden Methode bekomme ich allerdings die beliebige Zeichenfolge ebenso als Ergebnis. Wie kann ich die ausblenden?

Code:
public static void main(String[] args) {
  String s = "axbcdye";
  Pattern p = Pattern.compile(x[\\S]*y);
  Matcher m = p.matcher(s);
  System.out.println(s.substring(m.start(), m.end()));
  //liefert: xbcdy, gewollt ist aber: xy
}

Ich hatte mir überlegt einfach zweimal zu suchen, einmal was vor der beliebigen Zeichenfolge steht und einmal das danach, um dann die beiden Ergebnisse einfach zu mergen. Ich frage mich nur, ob es einen eleganteren Weg gibt, bzw. ob dafür nicht irgendwas vorgesehen ist....

Vielen Dank für Tipps!!
Phil
 
Hallo!

x[\\S]*?y

Aus dem Kopf. Sucht den kürzest möglichen "Zwischenstring".
Allerdings scheinst du mehrere Treffer zu haben, von daher solltest du m.find() in einer While-Schleife machen, denke ich...

peethebee
 
Aus einem regulären Ausdruck bekommst du Teilmengen über Gruppen zurück.
Diese Gruppen musst du mit Klammern () anlegen, d.h. eine negative Gruppe kannst du nicht definieren.
Du kannst aber, wie du schon beschrieben hast, die vordere und die hintere Gruppe zusammenführen.

Beispiel für den Ausdruck:

Code:
"(.*x).*(y.*)"

So bekommst du die Gruppe 1 mit allem was vor x (einschließlich) steht und Gruppe 2 mit allem was nach y (einschließlich) steht.

Zugreifen kannst du über Match.group(1) bzw Match.group(2).
(Match.group(0) gibt den gesamten Ausdruck zurück)
 
Also wenn es wirklich nur um die beiden Buchstaben geht brauchste nich unbedingt nen regulären Ausdruck ;)

Ich weiß ja nicht was genau du später damit filtern willst und ob die Zeichenketten länger als x und y sind ;) Weil sonst könntest du auch einfach mit der contains methode von string nach beiden Sachen suchen und wenn das erfolgreich ist ausgeben - da du weißt nach was du suchst weißt du ja auch was du haben willst.

Reguläre ausdrücke nutzt man ja eigentlich als schablone um sachen abzudecken von denen man eben nicht weiß was dazwischen stehen kann und man genau das haben will (wie du im ersten beitrag schon geschrieben hast).

lg
 

Neue Beiträge

Zurück