2012-06-28 37 views
6

Bất cứ ai có thể giúp tôi tạo một regex cho các biến trong java sao cho biến chuỗi sẽ được coi là không phân biệt chữ hoa chữ thường và thay thế từng từ như Access, access, vv với WINDOWS của bất kỳ điều như thế?Biến không phân biệt chữ hoa chữ thường cho String replaceAll (,) Phương thức Java

Đây là mã:

$html=html.replaceAll(label, "WINDOWS"); 

ý rằng nhãn là một biến chuỗi.

+4

Tại sao không chỉ đơn giản là thêm một chuỗi không phân biệt chữ hoa chữ thường vào chuỗi nhãn? '" (? i) "' –

+0

@pst: xin lỗi, làm sai. Đã chỉnh sửa nhận xét của tôi. –

+0

Có lẽ cũng lưu ý những gì replaceAll mất như là một đối số đầu tiên ... sau đó đăng nó như là một câu trả lời? ;-) –

Trả lời

23

Chỉ cần thêm "trường hợp nhạy cảm" chuyển sang regex:

html.replaceAll("(?i)"+label, "WINDOWS"); 

Lưu ý: Cẩn thận khi nhãn là bản thân regex, ví dụ: hãy tưởng tượng hiệu ứng nếu nhãn là ".*"

+3

Có một chức năng để trích dẫn nhãn để đảm bảo nhãn được coi là chữ. 'Pattern.quote()' http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html # quote (java.lang.String) – nhahtdh

1

Chỉ cần sử dụng mẫu và khớp. Đây là mã số

Pattern p = Pattern.compile("Your word", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("String containing words"); 
String result = m.replaceAll("Replacement word"); 

Sử dụng các mẫu dễ dàng vì chúng không phân biệt chữ hoa chữ thường.

Để biết thêm thông tin, xem

Matchmaking with regular expressions

Java: Pattern and Matcher

+0

Tại sao điều này lại khác biệt? str.replaceAll (reg, thay thế) là chính xác giống như Pattern.compile (reg) .matcher (str) .replaceAll (thay thế) – anttix

+0

Sử dụng matcher là phân biệt chữ hoa chữ thường. Xem bài viết trong javaworld –

+0

@SriHarshaChilakapati "Nó phụ thuộc". So sánh với câu trả lời của anttix. –

7

String.replaceAll là tương đương với việc tạo ra một khớp và gọi phương thức replaceAll của nó, do đó bạn có thể làm một cái gì đó như thế này để làm cho nó phân biệt dạng chữ:

html = Pattern.compile(label, Pattern.CASE_INSENSITIVE).matcher(html).replaceAll("WINDOWS"); 

Xem: String.replaceAllPattern.compile JavaDocs

+0

Có tác động đáng kể đến bộ nhớ/hiệu suất khi sử dụng phân biệt chữ hoa chữ thường (đối lập với phương thức thay thế() cho các chuỗi lớn? Ví dụ, một tài liệu có chứa các nhãn được xác định trước (các biến) có thể được thay thế động dựa trên một số logic ứng dụng. –

0

Tôi nghĩ nhưng không chắc chắn bạn muốn nhãn là một cái gì đó giống như [Aa][cC][cC][eE][sS][sS]

hoặc cách khác làm

html = Pattern.compile(lable, Pattern.CASE_INSENSITIVE) 
     .matcher(html).replaceAll("WINDOWS"); 
Các vấn đề liên quan