2011-10-03 27 views
9

Vì vậy, nếu tôi muốn thay thế b [bất cứ điều gì ở đây] trong một chuỗi có f [cùng một điều ở đây] thì tôi sẽ làm như thế nào? Ví dụ: Cụm từ thông dụng sẽ làm cho foobarfoo thành foofarfoo và foobanfoo thành foofanfoo là gì?Biểu thức chính quy thay thế nhưng giữ một phần của chuỗi

+0

tôi tìm thấy một bài viết tuyệt vời với hướng dẫn tại đây http://www.vogella.de/articles/JavaRegularExpressions/article.html nếu bạn biết char bạn muốn thay thế và vị trí của nó trong chuỗi này không quá phức tạp những gì tôi có thể nhìn thấy. –

+2

Có một số hạn chế bổ sung mà bạn không tiết lộ, hay bạn đơn giản không nghĩ đến việc thay thế "b" bằng "f"? Nói đúng, các cụm từ thông dụng chỉ phù hợp với chuỗi; thay thế không phải là một tính năng regex. – tripleee

Trả lời

12

Nguyên tắc cơ bản ở đây là một "nhóm chụp":

String output = input.replaceAll("foob(..)foo", "foof$1foo"); 

Đặt phần hấp dẫn bên trong dấu ngoặc trong biểu thức chính quy. Sau đó, nó có thể được tham chiếu theo số nhóm của nó trong replacement text, hoặc thông qua phương pháp Matcher.group().

+0

Cảm ơn ... Sẽ khớp với chuỗi có độ dài bất kỳ hoặc chỉ 2 ký tự? –

+0

Để làm rõ, điều này sẽ biến "foobarfoo" thành "foofarfoo" phải không? – corsiKa

+0

@ Tj3 Tôi tin rằng bạn muốn '" (. *) "' Nếu bạn muốn bất kỳ độ dài nào. '" (..) "' sẽ khớp chính xác với hai. – corsiKa

Các vấn đề liên quan