2010-02-17 28 views
5

Tôi đoán tôi đang thực sự yếu về logic.Cụm từ thông dụng không khớp với "www"

Tôi cần viết biểu thức chính quy khớp với mọi thứ ngoại trừ www. Mã này phải khớp với wwwd, abcd và mọi thứ khác, chỉ khôngwww. (Ôi Chúa ơi, làm ơn, không nên dễ dàng).

Tôi đang sử dụng biểu thức chính quy của ngôn ngữ Ruby.

CẬP NHẬT: Tôi cần sử dụng cụm từ thông dụng và không chỉ text != 'www' vì đó là cách API được thiết kế. Nó mong đợi một mẫu làm đối số chứ không phải là kết quả .

Trả lời

10

Tại sao lại chọn regex? Không phải là text != "www" đủ?

Ở đây nó được dù sao (sử dụng look-ahead): ^(?!www$).*

+0

trận đấu này chuỗi rỗng trên không "www" chuỗi, không phải toàn bộ từ. –

+0

@Dejw: Thx, cố định – soulmerge

4

Đây là một vani regex đơn giản. Có những điều quan trọng bạn có thể làm với các xác nhận tiêu cực ở một số phương ngữ nhất định.

^(.|..|[^w]..|.[^w].|..[^w]|.....*)$ 

Trong tiếng Anh:

Bạn muốn cái gì đó là chính xác một nhân vật, chính xác hai nhân vật, chính xác ba nhân vật có ít nhất một trong những 3 không phải là một w, hoặc nhiều hơn 3 ký tự.

+0

+1 cách tiếp cận tốt đẹp. Chỉ một giai đoạn không cần thiết trong nhóm cuối cùng. – soulmerge

+1

@Gumbo: Tại sao? '. [^ w] .' khớp với' wow'. – soulmerge

+0

@soulmerge: giai đoạn cuối không phải là thừa (giả sử bạn đang nói rằng nó không phải là năm giai đoạn). Đó là bốn dấu chấm (....) cộng với số không hoặc nhiều ký tự bổ sung (. *) Trong tổng số năm dấu chấm. Nó cũng có thể được xác định là ".... +". –

1

ý tưởng chung giống như Laurence Gonsalves (*), nhưng có vẻ như tôi có thể nói ^.$|^..$|^....+$|.*[^w].* Tức là, 1 hoặc 2 hoặc nhiều hơn 3 ký tự giữa đầu và cuối hoặc bất kỳ số nào có chứa non-w.

(*) Tôi thực sự muốn nói đây là nhận xét về câu trả lời của anh ấy, nhưng vô tình đăng nó làm câu trả lời của riêng tôi. Tôi đoán tôi sẽ để nó ở đây.

+0

Ooh, đơn giản hóa tốt đẹp. +1 –

0

Chỉ cần một cách tiếp cận

^.{0,2}([^w].*|.{4,})?$ 
Các vấn đề liên quan