2014-11-17 45 views
1

我想用正則表達式替換字符串的某些部分。這是我想要替換的字符串的192001Z部分。Java - 正則表達式替換字符串

代碼

String met = "192001Z 17006KT 150V210 CAVOK 11/07 Q1004 NOSIG"; 
String regexZ = "[0-9].{5}Z"; 
met = met.replaceAll(regexZ, "${.now?string(\"ddHHmm\")}Z"); 

我得到一個錯誤,當我想用​​${.now?string(\"ddHHmm\")}Z替換字符串的一部分。

但是當我例如用ThisNeedsToBeReplaced代替${.now?string(\"ddHHmm\")}Z一切正常。所以我的猜測是,我想用來替換我的原始字符串(met)的部分字符串出了問題。

我收到的錯誤是Illegal group reference

有沒有人有想法${.now?string(\"ddHHmm\")}Z有什麼問題?

回答

3

您需要使用:

met = met.replaceAll("\\b\\d{6}Z\\b", "\\${.now?string(\"ddHHmm\")}Z"); 
  • 正確的正則表達式匹配192001Z\b\d{6}Z\b
  • 你一定要逃逸更換$以及否則認爲是例如一個反向引用$1, $2 etx。
+0

不應'''也逃脫? – Maroun

+1

是的,逃避'$'將完成這項工作。 –

+1

@MarounMaroun:DOT​​在替換時沒有特別的意義,但'$'確實有。 – anubhava