SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 10 Daughters, 2 Sons

    10 Daughters

    10 Mart 2009
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009
  • SignatureSeries

    SignatureSer

    24 Aralık 2006