2011-01-20 37 views
17

Tôi đang cố gắng tìm regexp chỉ khớp với chuỗi nếu chúng không chứa dấu chấm, ví dụ: nó khớp với stackoverflow, 42abc47 hoặc a-bc-31_4 nhưng không khớp: .swp, stackoverflow hoặc test..Cách chỉ đối sánh các chuỗi không chứa dấu chấm (sử dụng cụm từ thông dụng)

+0

Nhân tiện, bạn nên cập nhật câu hỏi để phản ánh chính xác những gì bạn muốn. Bạn dường như * không * muốn làm nhưng câu hỏi cho biết bạn * làm * muốn dấu chấm. – Tom

Trả lời

28
^[^.]*$ 

hoặc

^[^.]+$ 

Tùy thuộc vào việc bạn muốn để phù hợp với chuỗi rỗng. Một số ứng dụng có thể ngầm cung cấp ^$, trong trường hợp đó chúng sẽ không cần thiết. Ví dụ: HTML5 input element's pattern attribute.

Bạn có thể tìm thấy nhiều thông tin tuyệt vời hơn trên trang web regular-expressions.info.

+0

cảm ơn, điều này đã làm việc! – tx31415

3

Sử dụng một regex mà không có bất kỳ dấu chấm:

^[^.]*$ 

Đó là zero hoặc nhiều ký tự mà không phải là dấu chấm trong toàn bộ chuỗi. Một số thư viện regex tôi đã sử dụng trong quá khứ có các cách để nhận được kết quả khớp chính xác . Trong trường hợp đó, bạn không cần ^$. Có một ngôn ngữ trong câu hỏi của bạn sẽ giúp ích.

Nhân tiện, bạn không để sử dụng regex. Trong java, bạn có thể nói:

!someString.contains("."); 
+0

@tchrist - Tôi đã cập nhật câu trả lời của mình. Tôi thực sự đã sử dụng các thư viện trước đây (không thể nhớ mặc dù) cho phép kết hợp chính xác. Tôi figured OP đã gặp rắc rối với nói "không dấu chấm". Ngoài ra - tôi nghĩ rằng phương pháp 'chứa' của tôi là khá hợp lý. Nhưng có lẽ đây là bài tập về nhà hoặc OP buộc phải sử dụng một số thư viện mà chỉ chấp nhận một regex ... – Tom

+0

Tôi sẽ thêm: giải pháp của tôi hoạt động cho hầu hết các ngôn ngữ, nhưng có thể tinh tế và tôi rất vui khi thử và làm rõ nếu OP cung cấp thêm chi tiết. Ngoài ra, thoát trong ngoặc là tốt (bằng ngôn ngữ tôi đã sử dụng) và tôi thích làm điều đó. – Tom

+0

@Tom: Tôi đồng ý rằng kiểm tra chuỗi con thay vì regex là một cách tiếp cận hoàn toàn hợp lý; câu hỏi có vẻ như bài tập về nhà hay bằng cách nào đó trên đầu họ. Những gì bạn đang nhớ là Java có phương pháp 'match' bị thay đổi (không bắt đầu tôi), điều này không thể cung cấp neo ngay cả khi bạn không; đó chỉ là một trong vài lý do tại sao bạn chỉ nên sử dụng phương thức 'find' của nó nếu bạn buộc phải sử dụng Java cho các regex (không phải là rất tốt cho chúng). Hầu hết các ngôn ngữ regex khác không quá lame. BTW, bạn vẫn có một dấu gạch chéo ngược giả mạo. Loại bỏ nó và tôi sẽ loại bỏ downvote của tôi. – tchrist

1

Xác thực Yêu cầu: Ký tự đầu tiên phải là chữ và sau đó là dấu chấm '.' không được phép trong Chuỗi mục tiêu.

// Chuỗi đầu vào chúng tôi đang sử dụng đầu vào chuỗi = "1A_aaA";

 // The regular expression we use to match 
     Regex r1 = new Regex("^[A-Za-z][^.]*$"); //[\t\0x0020] tab and spaces. 

     // Match the input and write results 
     Match match = r1.Match(input); 
     if (match.Success) 
     { 
      Console.WriteLine("Valid: {0}", match.Value); 

     } 
     else 
     { 
      Console.WriteLine("Not Match"); 
     } 
Các vấn đề liên quan