Có, có thể bật và tắt phân biệt chữ hoa chữ thường trong Java regex.
Có vẻ như bạn muốn một cái gì đó như thế này:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Lưu ý rằng cờ nhúng Pattern.CASE_INSENSITIVE
thì (?i)
không \?i
. Cũng lưu ý rằng một phần thừa \b
đã bị loại bỏ khỏi mẫu.
Dấu (?i)
được đặt ở đầu mẫu để phân biệt chữ hoa chữ thường. Trong trường hợp cụ thể này, nó không bị ghi đè sau này trong mẫu, do đó, trên thực tế, toàn bộ mẫu không phân biệt chữ hoa chữ thường.
Điều đáng chú ý là trên thực tế, bạn chỉ có thể hạn chế phân biệt chữ hoa chữ thường đối với các phần của toàn bộ mẫu. Vì vậy, câu hỏi đặt nó ở đâu thực sự phụ thuộc vào đặc điểm kỹ thuật (mặc dù đối với vấn đề cụ thể này, nó không quan trọng vì \w
nó không phân biệt chữ hoa chữ thường).
Để chứng minh, đây là một ví dụ tương tự về việc thu gọn các chữ cái giống như "AaAaaA"
chỉ "A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Bây giờ, giả sử rằng chúng ta chỉ định rằng chỉ nên thu gọn quá trình chạy nếu nó bắt đầu bằng một chữ cái viết hoa. Sau đó, chúng ta phải đặt (?i)
ở nơi thích hợp:
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Nói chung, bạn có thể bật và tắt bất kỳ cờ nào trong mẫu như bạn muốn.
Xem thêm
Câu hỏi liên quan