Tôi đang sử dụng while(matcher.find())
để lặp qua tất cả các kết quả khớp của Mẫu. Đối với mỗi trường hợp hoặc kết hợp của mẫu mà nó tìm thấy, tôi muốn thay thế matcher.group(3)
bằng một số văn bản mới. Văn bản này sẽ khác nhau cho mỗi một vì vậy tôi đang sử dụng matcher.appendReplacement()
để xây dựng lại chuỗi gốc với những thay đổi mới khi nó trải qua. Tuy nhiên, appendReplacement()
thay thế toàn bộ Mẫu thay vì chỉ nhóm.Làm thế nào để appendReplacement trên một nhóm Matcher thay vì toàn bộ mô hình?
Làm cách nào tôi có thể thực hiện việc này nhưng chỉ sửa đổi nhóm thứ ba của trận đấu thay vì toàn bộ Mẫu?
Dưới đây là một số mã ví dụ:
Pattern pattern = Pattern.compile("THE (REGEX) (EXPRESSION) (WITH MULTIPLE) GROUPS");
Matcher matcher = pattern.matcher("THE TEXT TO SEARCH AND MODIFY");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(buffer, processTheGroup(matcher.group(3));
}
nhưng tôi muốn làm một cái gì đó như thế này (rõ ràng điều này không làm việc).
...
while(matcher.find()){
matcher.group(3).appendReplacement(buffer, processTheGroup(matcher.group(3));
}
Điều gì đó giống như vậy, nó chỉ thay thế một nhóm nhất định, không phải toàn bộ Mẫu.
CHỈNH SỬA: đã thay đổi ví dụ về regex để cho thấy rằng không phải tất cả mẫu đều được nhóm.
Đây là lời cảm ơn tuyệt vời. Có cách nào để làm điều này nếu có một số khía cạnh của Mẫu không nằm trong nhóm không? (Tôi đã chỉnh sửa ví dụ của bài đăng gốc) – cottonBallPaws
Nếu bạn phải bao gồm các phần đó trong trận đấu (nghĩa là bạn không thể để chúng ra khỏi mẫu), thì bạn muốn chụp chúng trong một nhóm để bạn có thể nhớ những gì chúng khớp và đặt chúng trở lại không thay đổi gì như là một phần thay thế của bạn. – polygenelubricants
Lưu ý rằng điều này sẽ thất bại nếu một trong các chuỗi phù hợp chứa '$'. Xem câu trả lời của Warrens bên dưới. – Mene