2016-05-11 7 views
1

Ich versuche, Zeichenfolge über Regex zu ersetzen.Java Regex ersetzen String in Datei

Ziel String:

if (ValidationUtil.checkNullable(groupDataObject) || !groupDataObject.isNotificationEnable() || 

Regex

.*(ValidationUtil\DcheckNullable)([a-zA-Z0-9]*).* 

ersetzen Muster

$2 == null 

Wishful Ergebnis:

if (groupDataObject == null || !groupDataObject.isNotificationEnable() || 

Und es hat nicht funktioniert. Es produziert Ergebnis == null. Was mache ich falsch?

Antwort

2

können Sie die folgende regex verwenden:

(ValidationUtil\DcheckNullable)\(([a-zA-Z0-9]*)\) 
           ^^    ^^ 

I .* entnommen und \( und \).

Siehe regex demo

Wenn Sie müssen auch Klammern und Punkte entsprechen, nur um sie in der Zeichenklasse gehören:

(ValidationUtil\DcheckNullable)\(([a-zA-Z0-9().]+)\) 
              ^^^ 

See this regex demo

beachten Sie, dass an Stelle von \D, Sie kann den Punkt verwenden, nur daran erinnern, dass es mit doppeltem umgekehrten Schrägstrich in einem Java-Zeichenfolgenliteral maskiert werden sollte: String pat = "(ValidationUtil\\.checkNullable)\\(([a-zA-Z0-9().]+)\\)"

+0

Eine weitere Frage hinzu. In einigen Fällen habe ich Word-Konstruktion 'mAdapter.getFilter()' anstelle von 'groupDataObject' - ** ValidationUtil.checkNullable (mAdapter.getFilter()) **? Wie schließt man Klammern und Punkte ein? –

+0

Nur für 'mAdapter.getFilter()' - ['(ValidationUtil \ DcheckNullable) \ (([a-zA-Z0-9] + (?: (?: \. [A-zA-Z0-9] +) \ ([^()] * \)) *) \) '] (https://regex101.com/r/qL5lI7/1) kann helfen. –

+0

Nun, KISS-Lösung ist ['(ValidationUtil \ DcheckNullable) \ (([a-zA-Z0-9().] +) \)'] (Https://regex101.com/r/qL5lI7/2) –

0

$ 2 null ist, weil es keine Übereinstimmung für die nächste Gruppe ist, da die folgenden Zeichen ist (

.*(ValidationUtil\.checkNullable)\(([a-zA-Z0-9]*)\).*

das obige Muster Versuchen hat es \( die dann überspringt ( und findet die Gruppe 2 Spiel. Auch wenn Sie nur groupDataObject extrahieren möchten, fügen Sie eine nachfolgende \)