2013-04-25 40 views
8

Cú pháp chính xác cho khớp với tất cả các ký tự ngoại trừ các ký tự cụ thể là gì.Java regex khớp với tất cả các ký tự ngoại trừ

Ví dụ: tôi muốn đối sánh mọi thứ trừ chữ cái [A-Z] [a-z] và số [0-9].

Tôi đã

string.matches("[^[A-Z][a-z][0-9]]") 

Đây có phải là không chính xác?

+1

[^ A-Za-z0-9] .. – Pheonix

Trả lời

18

Có, bạn không cần lồng nhau [] như thế. Sử dụng tùy chọn này thay thế:

"[^A-Za-z0-9]" 

Đó là tất cả một lớp nhân vật.

+0

ahh tất nhiên, nó phải nhận được muộn lol – Tommy

1
string.matches("[^A-Za-z0-9]") 
1

Hầu như đúng. Những gì bạn muốn là:

string.matches("[^A-Za-z0-9]") 

Dưới đây là một tốt tutorial

6

Nếu bạn muốn kết hợp bất cứ điều gì nhưng chữ cái, bạn nên có một cái nhìn vào Unicode properties.

\p{L} là bất kỳ loại lá thư từ bất kỳ ngôn ngữ

Sử dụng một "P" viết hoa thay vào đó là sự phủ định, vì vậy \P{L} sẽ phù hợp với bất cứ điều gì đó không phải là một lá thư.

\d hoặc \p{Nd} là phù hợp với chữ số

Vì vậy, biểu hiện của bạn trong phong cách Unicode hiện đại sẽ trông như thế này

Hoặc sử dụng một lớp nhân vật phủ nhận

[^\p{L}\p{Nd}] 

hoặc phủ nhận tính

[\P{L}\P{Nd}] 

Điều tiếp theo là, matches() khớp với biểu thức so với chuỗi hoàn chỉnh, vì vậy biểu thức của bạn chỉ đúng với một char trong chuỗi. Vì vậy, bạn sẽ cần phải thêm một định lượng:

string.matches("[^\p{L}\p{Nd}]+") 

trả về true, khi chuỗi hoàn chỉnh không chỉ có chữ số và ít nhất một trong số chúng.

0

Cho phép nói rằng bạn muốn đảm bảo rằng không có chuỗi nào có biểu tượng _ trong chúng, thì bạn sẽ chỉ sử dụng một cái gì đó như thế này.

Pattern pattern = Pattern.compile("_"); 
    Matcher matcher = Pattern.matcher(stringName); 
    if(!matcher.find()){ 
     System.out.println("Valid String"); 
    }else{ 
     System.out.println("Invalid String"); 
    } 
Các vấn đề liên quan