14 AĞUSTOS 2009, Cuma
Java Düzenli ifade Grubu Yakalama Değiştir
Yakalama grubunun modifiye içerikli bir regexp değiştirmek için herhangi bir yolu var mı?
Örnek:
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher(text);
resultString = regexMatcher.replaceAll("$1"); // *3 ??
Ve $1 3 çarpı ile her geçtiği yerde değiştirmek istiyorum.
düzenleme:
Bir terslik var gibi görünüyor :(
Eğer kullanırsam
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher("12 54 1 65");
try {
String resultString = regexMatcher.replaceAll(regexMatcher.group(1));
} catch (Exception e) {
e.printStackTrace();
}
Bir İllegalStateException atar: eşleşme bulunamadı
Ama
Pattern regex = Pattern.compile("(\\d{1,2})");
Matcher regexMatcher = regex.matcher("12 54 1 65");
try {
String resultString = regexMatcher.replaceAll("$1");
} catch (Exception e) {
e.printStackTrace();
}
gayet iyi çalışıyor, ama değiştiremem $1 :(
düzenleme:
Şimdi, işe yarıyor :)
CEVAP
14 AĞUSTOS 2009, Cuma
Hakkında:
if (regexMatcher.find()) {
resultString = regexMatcher.replaceAll(
String.valueOf(3 * Integer.parseInt(regexMatcher.group(1))));
}
İlk maç için #find()
kullanın. Bundan sonra, #group(1)
Bu ilk maç için başvurun ve ilk maches değeri 3 ile çarpılır maçlar tüm değiştirmek için kullanabilirsiniz.
Ve bu maçın değerinin 3 katı ile her maç değiştirmek istediğiniz durumda:
Pattern p = Pattern.compile("(\\d{1,2})");
Matcher m = p.matcher("12 54 1 65");
StringBuffer s = new StringBuffer();
while (m.find())
m.appendReplacement(s, String.valueOf(3 * Integer.parseInt(m.group(1))));
System.out.println(s.toString());
Bu ve çok daha fazla şeyler de detaylı olarak ele nerede Matcher
's documentation, bakmak isteyebilirsiniz.
Bunu Paylaş:
Nasıl başvuru normal ifade içeren bir ...
Nasıl Java düzenli ifade için metin ka...
Nasıl erişim yakalama grupları adında ...
Adında bir JavaScript düzenli ifade gr...
Arasındaki fark() maçları ve Bul() Jav...