2010-06-03 64 views
21

Tôi đập đầu vào tường bằng một biểu thức thông thường. Tôi đang cố gắng để xác định một biểu thức không bao gồm chính xác văn bản này 'Hệ thống' (phân biệt chữ hoa chữ thường), nhưng có thể chứa từ 'Hệ thống' cung cấp không chỉ có vậy.Regex không bằng chuỗi

Ví dụ:

  • Hệ thống == INVALID
  • HỆ THỐNG == INVALID
  • hệ thống == INVALID
  • hệ thống == INVALID
  • asd hệ thống == trị hệ thống
  • asd asd == Hợp lệ
  • Hệ thống asd == Hợp lệ
  • asd Hệ thống == trị
  • asd == trị

Trả lời

38

Hãy thử điều này:

^(?!system$) 

Hoặc này để phù hợp với toàn bộ dòng:

^(?!system$).*$ 

Các regex có tiêu cực nhìn về phía trước khi bắt đầu, nó không khớp nếu "hệ thống" là toàn bộ chuỗi.

+0

Chỉ vì tò mò, làm thế nào?! nhà điều hành làm việc? Tôi đã không bao giờ được sử dụng một (mặc dù tôi đã sử dụng khá nhiều regex tôi có xu hướng tìm các giải pháp mà không sử dụng 'không'). – Alxandr

+1

Ahh, thật đơn giản! Tôi chắc là tôi đã thử ...! Cảm ơn bạn. – Kieron

+1

@Alxandr - nó sẽ kiểm tra những gì theo vị trí hiện tại của bạn. Ví dụ, 'c (?! 4)' sẽ khớp với c từ 'Doc12', chứ không phải c trên 'Doc42'. Một cái nhìn xung quanh không chụp, vì vậy tôi không phải lo lắng về việc thay thế chữ số, hoặc kiểm tra trường hợp cạnh (ví dụ, nếu c là ký tự cuối cùng: 'Doc'). – Kobi

4

Từ chối nếu nó khớp với ^system$ (đảm bảo cờ i được BẬT).

+0

Đây phải là tùy chọn đầu tiên hoặc khóa học. Tôi tự nhiên (và có thể sai) cho rằng OP không thể làm được. – Kobi

1
^$|^.{1-5}$|.{7}|^[^s]|^.[^y]|^..[^s]|^...[^t]|[^e].$|[^m]$ 

Nhưng sử dụng câu trả lời của amarghosh nếu có thể.

(được cập nhật theo đề xuất bên dưới)

+0

Bạn có thể có nghĩa là '. {1,5}'. – Kobi

+0

heh, tôi đã viết mà không thử nghiệm nó. Tôi hơi sốc vì nó thực sự làm việc lần đầu tiên. Hai mệnh đề đầu tiên là thừa, mặc dù vậy: (^. {1-6} $) | (. {8}) | (^ [^ s]) | (^. [^ Y]) | (^ .. [^ s]) | (^ ... [^ t]) | ([^ e]. $) | ([^ m] $) Mẹo hay về?! mặc dù - tôi đã không nghe nói về nó. –

+0

oops. mà regex cho phép thông qua "systuem". (và thất bại trên chuỗi rỗng, mà dường như là chấp nhận được?) thử: ^ $ | ^. {1-5} $ |. {7} |^[^ s] | ^. [^ y] |^.. [^ s] |^... [^ t] | [^ e]. $ | [^ m] $ –

Các vấn đề liên quan