2016-07-05 4 views
2

Ich brauche Substrings in Java zu finden und zu ersetzen, zum Beispiel Variablennamen, die mit ‚%‘ beginnen, regex wie die Verwendung von:Gibt es eine Möglichkeit, in java matcher regex nur eine erfasste Gruppe zu ersetzen?

[\s,(](%variable)[\s,)$] 

Ich möchte alle Variablen finden, die ihre Namen speichern und zu ersetzen, sie zu einem Platzhalter, zum Beispiel %%. Kann nicht finden, wie es in Java möglich ist, bitte helfen Sie. Matcher # replaceAll ersetzt die ganze regexp, aber ich muss nur die erste Gruppe ersetzen, nicht das ganze Vorkommen.
Hier ist das Code-Beispiel, das ich für die Suche verwenden:

Matcher m=Pattern.compile(regex).matcher(str); 
while(m.find()) 
{ 
    System.println(m.group(1)); 
} 

Upd: Die Lösung besteht darin, die Captures ganze Regex zu setzen:

([\s,(])(%variable)([\s,)$]) 

Und replaceAll ("$ 1" + Ersatz zu verwenden + "$ 3") dann

+0

Haben Sie versucht, 'replaceFirst' Methode? – developer033

+0

@ developer033 Das wird nichts mit Capture-Gruppen tun. Das ersetzt nur die erste Übereinstimmung der Regex, anstatt alle Übereinstimmungen zu ersetzen. – 4castle

+0

Nun, er sagte: "Ich muss nur die erste Gruppe ersetzen, nicht das ganze Vorkommnis." – developer033

Antwort

1

Sie können einige Gruppen Ihrer Regex beibehalten und andere in den Vorkommen in einer Zeichenfolge ersetzen. Wenn wir annehmen, dass Ihre Regex: [\\s,\\(](%variable)[\\s,$] ist, können Sie die replaceAll()-Methode von java.lang.String verwenden. Sie müssen zuerst Ihre regex in Form von Saparate Gruppen setzen

ex: ([\\s,\\(])(%variable)([\\s,$]), so haben Sie

Die erste Gruppe ist: [\\s,\\(]

Die zweite Gruppe %variable

ist und Die dritte Gruppe ist [\\s,$], jetzt können Sie den Referenzwert Ihrer Gruppe auf den Endwert setzen, der jedes in Ihrer Regex gefundene Vorkommen ersetzt, zum Beispiel wenn wir das zweite ersetzen wollen

$1 und $3 zur ersten beziehen und die dritte Gruppe, wir halten sie in der replaceValue

String myRegex = "([\\s,\\(])(%variable)([\\s,$])"; 
String replacedValue = originalValue.replaceAll(myRegex,"$1myNewVal$3"); 
: Gruppe mit der Zeichenfolge ‚myNewVal‘ wird der Code sein.

, wenn Sie nur die zweite Gruppe entfernen möchten Sie dies versuchen:

String myRegex = "([\\s,\\(])(%variable)([\\s,$])"; 
String replacedValue = originalValue.replaceAll(myRegex,"$1$3"); 
+0

Ja, nur die gleiche Antwort hier gefunden: http://stackoverflow.com/questions/3954927/js-regex-how-to-replace-the-captured-groups-only – BbIKTOP

+0

Gut, die gleiche Idee. – Mifmif

Verwandte Themen