2012-03-19 38 views
14

Tôi đang cố gắng viết xác nhận Chuỗi để khớp với bất kỳ ký tự nào (thông thường, chữ số và đặc biệt) ngoại trừ =.Sử dụng regex để khớp với bất kỳ ký tự nào trừ =

Dưới đây là những gì tôi đã viết -

String patternString = "[[^=][\\w\\s\\W]]*"; 
    Pattern p = Pattern.compile(patternString); 
    Matcher m = p.matcher(str); 

    if(m.matches()) 
     System.out.println("matches"); 
    else 
     System.out.println("does not"); 

Tuy nhiên, nó phù hợp với chuỗi đầu vào "2009-09/09 12: 23: 12,5 =" với mô hình.

Làm cách nào để loại trừ = (hoặc bất kỳ ký tự nào khác, cho vấn đề đó) khỏi chuỗi mẫu?

+0

Bạn đang cố gắng kết hợp điều gì? (hay không)? chỉ [^ =] * sẽ khớp với bất kỳ thứ gì trừ '=' char. –

+1

Bạn không thể lồng các lớp ký tự. '[[]' chỉ đơn giản là một lớp ký tự bao gồm ký tự đơn '['. – tripleee

Trả lời

30

Nếu ký tự bị cấm duy nhất là dấu bằng, giống như [^=]* sẽ hoạt động.

[^...] là một lớp ký tự phủ định; nó khớp với một ký tự đơn lẻ là bất kỳ ký tự nào ngoại trừ một ký tự từ danh sách giữa các dấu ngoặc vuông. * lặp lại biểu thức bằng không hoặc nhiều lần.

4

Nếu bạn chỉ muốn kiểm tra sự xuất hiện của "=" tại sao bạn không sử dụng phương thức String indexOf()?

if str.indexOf('=') //... 
+6

'contains' ngắn hơn, dễ hiểu hơn và bạn không cần phải loay hoay với các chỉ số. – phihag

7

Trước hết, bạn không cần regexp. Đơn giản chỉ cần gọi contains:

if(str.contains("=")) 
    System.out.println("does not"); 
else 
    System.out.println("matches"); 

Các regexp chính xác bạn đang tìm kiếm chỉ là

String patternString = "[^=]*"; 
1

Nếu mục tiêu của bạn là để không có bất kỳ nhân vật = trong chuỗi của bạn, hãy thử những điều sau

String patternString = "[^=]*"; 
Các vấn đề liên quan