Ich möchte alle Unterzeichenfolgen aus einer Zeichenfolge extrahieren, die in bestimmten Tags enthalten sind. Zum Beispiel, wenn ich eine Eingabezeichenfolge habe, die einige Unterketten in „*“ Tags einschließt:Java RegEx: Extrahieren mehrerer Unterzeichenfolgen aus einer Zeichenfolge
I contain two terms to extract: *first term* and *second term*
Was ich will bekommen, sind die beiden Teilketten „erste Term“ und „zweiter Begriff“. Ich habe versucht, mit dem folgenden Code:
List<String> matches = new ArrayList<>();
Matcher m = Pattern.compile(".*\\*(.*)\\*.*").matcher(inputString);
while(m.find()){
matches.add(m.group(1));
}
Aber das gibt mir falsche Ergebnisse. Ich habe das API Dokument über die group
Methode gelesen, aber um ehrlich zu sein, verstehe ich nicht ganz, was es bedeutet und wie es funktioniert. Ich wäre dankbar, wenn mir jemand sagen könnte, was der beste Weg ist, um alle gewünschten Sub-Strings hier zu sammeln.
Danke!
Verwenden Sie '\\ * (. *?) \\ *', also nicht gierig. – Tunaki
Was bedeutet "gierig"? danke – user3237736
"Gierig" bedeutet, dass, wenn es mehr als eine Möglichkeit gibt, eine Übereinstimmung zu erhalten, die Übereinstimmung mit der größten Anzahl von Zeichen gewählt wird. Wenn Ihre Regex "a. * B" ist und Ihre Eingabezeile "a1111b ... a2222b" lautet, entspricht dies der gesamten Zeichenfolge, da sie die größtmögliche Übereinstimmung für '. *' Auswählt. Wenn Sie das Fragezeichen "a. *? B" hinzufügen, sagen Sie ihm, dass er die Übereinstimmung mit der kleinsten Anzahl von Zeichen auswählen soll. Das würde also "a1111b" entsprechen. – ajb