Ich fange eine Gruppe von Regex und ich möchte alles fangen, aber nicht die Gruppe (n). So Gruppe kann mehrere Vorkommen an verschiedenen Orten in der Zeichenfolge haben.Kann ein Quantifizierer für eine nicht einfangende Gruppe verwendet werden? - Regex
Mein erster Gedanke war, es mit negativem Lookahead zu lösen, aber ich scheiterte damit. Deshalb habe ich es mit nicht einfangender Gruppe versucht und bin auch hier geblieben.
(bar) (baz) foo
Ich möchte foo.
Dies ist, was ich bisher:
String input = "(bar) (baz) foo";
String matchesGroup = "((?=\\().*?\\))"; //matches (...)
// as Casimir et Hippolyte commented, I know use
// ((?:(...))+) for the non capturing group
String matchesFoo = "((?:"+ matchesGroup +")+)\\s(.*)";
Pattern pattern = Pattern.compile(matchesFoo);
Matcher matcher = pattern.matcher(input);
while (matcher.find()){
System.out.println(matcher.group());
}
aber es gibt nichts an allen
gefangenaktuell:
erwartet: foo
Wo ist mein Fehler in der Regex?
Sie müssen die nicht-c wiederholen apturing group, nicht '(match)'. Setzen Sie die Whitespace-Zeichenklasse in die nicht erfassende Gruppe. –
Nun, Sie sagen nicht, dass Leerzeichen zwischen den Vorkommen von Übereinstimmungen erwartet werden. Die Zeichenfolge 'matchsmatches foo' funktioniert anstelle Ihres zweiten Beispiels. – bcsb1001
Sie wollen also alles von der Eingabezeichenfolge, die nicht innerhalb einer öffnenden und schließenden Klammer ist? – dpr