Reguläre Ausdrücke: string.matches() und gefangene Gruppen

Crian

Top Contributor
Ich frage mich gerade, ob es nach

Java:
String string = "Nur ein Beispiel-Text.";
if (string.matches(".*(ein).*(Text).*") {
    String ein = ...;
}

eine Möglichkeit gibt, an die gefangene Gruppe zu kommen, oder ob das zwingend nur per


Java:
String string = "Nur ein Beispiel-Text.";
Pattern pattern = Pattern.compile(".*(ein).*(Text).*");
Matcher matcher = pattern.matcher(string);
if (matcher.matches() {
    String ein = matcher.group(1);
}

geht.
 

Michael...

Top Contributor
Mit erster Variante kann man nur prüfen, ob ein String einem bestimmten Muster entspricht.
Mit zweiter Variante kann man einen String anhand eines Musters zerlegen. Ob ein Code hässlich wird liegt ja auch am Programmierer ;-)

Mal absehen vom Sinn Deines Beispiels hast Du in der zweiten Variaten ja nur eins, zwei Code Zeilen mehr.
 

Crian

Top Contributor
Ja, nur findet das Ganze an einer Stelle statt, wo ein String auf mehrere Muster untersucht und je nach Muster verschiedenes mit ihm angestellt werden soll in einer if - else if - else if --- else Abfolge. Während ersteres einfach in die Bedingungen der if-Abfragen gepasst hätte, musste ich nun vor dem Konstrukt alle Pattern und Matcher zusammenbasteln, auch wenn zum Beispiel schon das erste greifen würde.

Oder ich müsste jedes Pattern zweimal durchlaufen (einmal als [c]string.matches(...)[/c] und dann noch als Pattern und Matcher), was unelegant und langsam wäre (wobei langsam hier relativ egal ist).

Oder ich würde in einer boolschen Variablen festhalten, ob ich schon Erfolg hatte. Das würde dann auch lang und wenig schön.

Im Moment mache ich das nun so, dass die Pattern außerhalb der Methode als [c]private final static Pattern[/c] definiert sind (wie andere Pattern auch, nur dass diese nicht so teuer wären) und die Matcher vor dem Abfragekonstrukt gebildet werden.

Das ist nicht ideal, aber solange das kein Flaschenhals ist (und das wird es nicht, da das nur einmal zu Beginn einer langen Bearbeitung danach erfolgt), werde ich das wohl so lassen, falls hier nicht jemandem noch eine weitere, gute Möglichkeit einfällt.
 

Michael...

Top Contributor
Ich sehe da keinen grossen Unterschied. Geht es um das erzeugen eines Matcher Objekts?

Grundsätzlich musst Du ja in beiden Fällen die Muster solange durchlaufen bis einens passt.

Wie ähnlich/unterschiedlich sind denn die Muster? Eventuell lassen diese sich ja noch zusammenfassen. Code in Methoden auslagern hilft auch.
Wie man da am besten vorgeht, hängt auch vom konkreten Anwendungsfall ab.
 

Crian

Top Contributor
Der Unterschied ist, dass ich nicht alle Muster durchlaufen müsste, wenn denn eines der vorigen greift. Aber da es kein zeitkritischer Part ist, macht das nichts.

Code in Methoden auslagern hat irgendwo eine natürliche Grenze. Ich refakturiere den Code immer mal wieder, wenn mir Methoden zu lang, zu komplex erscheinen oder sie zu viele Dinge auf einmal tun. Aber irgendwo ist eine Grenze erreicht, an der eine Flut von Methoden auch nicht gerade einen guten Überblick verschafft.
 

Crian

Top Contributor
Das hängt wohl davon ab, wie der Matcher intern funktioniert. Wird der Vergleich beim Definieren gemacht und in .matches() nur abgefragt, oder erfolgt er beim .matchers()-Aufruf?
 

Michael...

Top Contributor
Ich glaube mir reden aneinander vorbei.
Geht es Dir darum was effizienter ist: String#matches() oder oder über ein Pattern einen Matcher zu erzeugen?

String#matches() macht letztendlich auch nichts anderes als ein Pattern zu erzeugen und daraus einen Matcher zu generieren.
 

Michael...

Top Contributor
Wenn man mal davon ausgeht, dass bei Verwendung von Matchern das Pattern bereits kompiliert ist, dann bedeutet diese Variante lediglich zwei Zeilen mehr Code pro Suchmuster.

Java:
Matcher matcher = pattern1.matcher("meinText");
if (matcher.matches() {
    ...
    return;
}
//Falls das erste Muster nicht passt, das nächste prüfen
matcher = pattern2.matcher("meinText");
if (matcher.matches() {...

Java:
if ("meinText".matches("patternText1") {
   ...
}
//Falls das erste Muster nicht passt, das nächste prüfen
else if ("meinText".matches("patternText2") {...

Wenn Du genauer beschreibst was Du vorhast, kann man ein paar Vorschläge zur möglichen Umsetzung machen.
 

Crian

Top Contributor
Ich kann kein return verwenden an dieser Stelle. Deshalb erwähnte ich die Verwendung der boolschen Variablen. Aber ich werde versuchen, den Block in eine Funktion auszulagern. Dann kann ich dort sehr wohl mit return raus und spare mir unnötige Matcher-Bildungen.

Edit: Ich hab es jetzt so gemacht. Danke nochmal, dass du da mein geistiger Sparringspartner warst. :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
0 Reguläre Ausdrücke bzw. Zahlenformat im String Java Basics - Anfänger-Themen 7
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
K FYI: Reguläre Ausdrücke nutzen ja/nein Java Basics - Anfänger-Themen 2
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
P Reguläre Ausdrücke und Korrektheit Java Basics - Anfänger-Themen 2
G Reguläre Ausdrücke Zeichenketten Java Basics - Anfänger-Themen 12
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
C Reguläre-Ausdrücke Java Basics - Anfänger-Themen 5
J reguläre Ausdrücke Java Basics - Anfänger-Themen 1
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
H Erste Schritte Von jpg zu jpeg // reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
S Reguläre Ausdrücke richtig einsetzten Java Basics - Anfänger-Themen 5
T Reguläre Ausdrücke Java Basics - Anfänger-Themen 18
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
D Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 16
A Reguläre Ausdrücke Frage Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke mit sehr variablen Eigenschaften Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke - bekomme Suchkriterium nicht hin Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke in Java Java Basics - Anfänger-Themen 2
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
S Strings und reguläre Ausdrücke Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 4
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre ausdrücke? Java Basics - Anfänger-Themen 8
D Reguläre Ausdrücke: Anzahl Wiederholungen als Variable? Java Basics - Anfänger-Themen 3
A Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre Ausdrücke - maskieren von Zeichen? Java Basics - Anfänger-Themen 9
M Reguläre Ausdrücke und Ausgabe Java Basics - Anfänger-Themen 10
K Reguläre Ausdrücke - Gefundene Tokens direkt ermitteln Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke: Zeichenfolge ausschließen Java Basics - Anfänger-Themen 2
G Reguläre Ausdrücke Java Basics - Anfänger-Themen 13
L java und reguläre ausdrücke Java Basics - Anfänger-Themen 4
G Reguläre Ausdrücke zum Filtern von logfiles Java Basics - Anfänger-Themen 2
T Reguläre Ausdrücke? Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke Java Basics - Anfänger-Themen 17
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke der Pfade unter Windows und Unix Java Basics - Anfänger-Themen 3
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
G Problem reguläre Ausdrücke Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke: Inhalt zwischen zwei Schlüsselwörtern Java Basics - Anfänger-Themen 2
A Reguläre Ausdrücke: Problem mit Backslash Java Basics - Anfänger-Themen 3
W Reguläre Ausdruck Java Basics - Anfänger-Themen 6
K Warum zeigt dieser reguläre Ausdruck true an? Java Basics - Anfänger-Themen 1
S reguläre Audrücke verbinden Java Basics - Anfänger-Themen 18
N reguläre ausdruech und exception Probleme Java Basics - Anfänger-Themen 7
R Reguläre Ausdruck definieren Java Basics - Anfänger-Themen 3
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
C Boolsche Ausdrücke Java Basics - Anfänger-Themen 3
A Schleifen und Boolsche Ausdrücke Java Basics - Anfänger-Themen 42
G Java Lambda Ausdrücke Java Basics - Anfänger-Themen 19
A Lambda-Ausdrücke Java Basics - Anfänger-Themen 6
G Lambda Ausdrücke Java Basics - Anfänger-Themen 2
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
B Erste Schritte Boolesche Ausdrücke & Gesetze Java Basics - Anfänger-Themen 3
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
D Variablen Ausdrücke Java Basics - Anfänger-Themen 6
M Lambda - Ausdrücke verstehen Java Basics - Anfänger-Themen 2
N Lambda Ausdrücke richtig schreiben Java Basics - Anfänger-Themen 4
F Methoden Lambda Ausdrücke Methodensignatur Java Basics - Anfänger-Themen 6
P Ausdrücke berechnen Java Basics - Anfänger-Themen 2
J Java 8 Lamda ausdrücke Java Basics - Anfänger-Themen 9
C Lambda Ausdrücke Java Basics - Anfänger-Themen 1
TheSorm Java 8 Lambda-Ausdrücke Java Basics - Anfänger-Themen 9
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
K Ausdrücke auswerten Java Basics - Anfänger-Themen 8
C Boolsche Ausdrücke - Wo ist mein Fehler? Java Basics - Anfänger-Themen 14
M Boolsche Ausdrücke minimieren Java Basics - Anfänger-Themen 13
S arithmetische Ausdrücke prüfen Java Basics - Anfänger-Themen 11
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
T Ausdrucksparser für Mathematische Ausdrücke Java Basics - Anfänger-Themen 15
N Ausdrücke Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
C arithmetische Ausdrücke Java Basics - Anfänger-Themen 7
M regüläre Ausdrücke, die String - Variablen und Expression Java Basics - Anfänger-Themen 5
M Ausdrücke -> Werte Java Basics - Anfänger-Themen 6
A mehrere Ausdrücke in for schleife vergleichen Java Basics - Anfänger-Themen 6
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben