2016-04-06 5 views
-1

Ich versuche, eine Zeichenfolge Auftreten in einer Abfrage wie folgt zu ersetzen:Kann Zeichenkette nicht mit Regex in Java ersetzen

SELECT * FROM DB WHERE AGE = 3 and NAME = 'VALUE' 

Ich verwende diese regex: NAME\s*=\s*'[A-Z]+' die feine here

arbeitet Folgendes habe ich in Java versucht:

query.replaceAll("NAME\s*=\s*'[A-Z]+'", replacementString); // Gives me Invalid escape sequence message 
query.replaceAll("NAME\\s*=\\s*'[A-Z]+'", replacementString); 

Pattern pattern = Pattern.compile("NAME*= *'[A-Z]*'"); 
query.replaceAll(pattern.pattern(), replacementString); 

Pattern pattern2 = Pattern.compile("NAME\\s*=\\s*'[A-Z]*'");     
query.replaceAll(pattern2.pattern(), replacementString); 

Keine dieser Arbeiten.

Wie kann ich das Vorkommen NAME = 'VALUE' ersetzen? diese

+0

Ihre Schrägstriche entkommen: '\\ s *' die „ungültige Escape-Sequenz“ Fehler zu beheben. –

+0

Verwenden Sie zwei Backslashes –

+0

Vorsicht: Stellen Sie sicher, "VALUE" enthält nie '' ', sonst genügt einfache Regex nicht. – bezmax

Antwort

1

Java-Strings sind unveränderlich.

Sie müssen das Ergebnis der replaceAll Rückruf auf die Zeichenfolge zuzuweisen:

query = query.replaceAll(...); 
+1

Warum eine offensichtliche Antwort posten? http://stackoverflow.com/questions/3611635/java-regex-replaceall-does-not-replace-string –

0

Versuchen,

query.replaceAll("NAME\\s*=\\s*'[A-Z]+'", replacementString); 
query.replaceAll("NAME\\s*=\\s*'[A-Z]+'", replacementString); 

Und dann in Ihrem Muster,

Pattern pattern2 = Pattern.compile("NAME\\s*=\\s*'[A-Z]*'");     
query.replaceAll(pattern2.pattern(), replacementString); 
+0

Was ist, wenn OP zuerst das Muster kompilieren will? –

+0

Bereits versucht, funktioniert es nicht –