Regex - Không chứa các ký tự nhất định


274

Tôi cần một biểu thức chính quy để khớp nếu bất cứ nơi nào trong câu KHÔNG có <hoặc>.

Nếu <hoặc> nằm trong chuỗi thì nó phải trả về false.

Tôi đã thành công một phần với điều này nhưng chỉ khi <> của tôi ở đầu hoặc cuối:

(?!<|>).*$

Tôi đang sử dụng .Net nếu điều đó làm cho một sự khác biệt.

Cảm ơn đã giúp đỡ.

Câu trả lời:


436
^[^<>]+$

Dấu mũ trong lớp ký tự ( [^) có nghĩa là khớp với bất cứ thứ gì, nhưng điều này có nghĩa là bắt đầu chuỗi, sau đó là một hoặc nhiều thứ ngoại trừ <>sau đó là kết thúc chuỗi.


3
Caret đầu tiên có nghĩa là gì? Điều này có nghĩa là không phải bất cứ thứ gì không chứa các ký tự đó ... do đó chỉ có nghĩa là các chuỗi có chứa các ký tự đó?
RobKohr

11
Các dấu mũ đầu tiên có nghĩa là, bắt đầu của chuỗi. Đồng đô la có nghĩa là, kết thúc chuỗi.
Ned Batchelder

2
@PhilipRego Cẩn thận với các ký tự đặc biệt: shell diễn giải một số trong số chúng. Nhìn xem nếu bây giờ bạn có một tệp có tên '] + $' trong thư mục của bạn. Đặt toàn bộ regex bên trong dấu ngoặc đơn để làm cho nó hoạt động.
Ned Batchelder

Câu trả lời chính xác! Bạn có thể thêm một lời giải thích tại sao có một+ và dấu mũ đầu tiên?
Dr_Zaszuś

1
@ Dr_Zaszuś "+" có nghĩa là "một hoặc nhiều" và "^" có nghĩa là "bắt đầu chuỗi".
Ned Batchelder

59

Ở đây bạn đi:

^[^<>]*$

Điều này sẽ kiểm tra chuỗi không có <và không có>

Nếu bạn muốn thử nghiệm cho một chuỗi mà có thể có <>, mà còn phải có một cái gì đó khác mà bạn nên sử dụng chỉ

[^<>] (or ^.*[^<>].*$)

Ở đâu [<>] có nghĩa là bất kỳ <hoặc>[^<>]có nghĩa là bất kỳ không phải là <hoặc> .

Và tất nhiên các liên kết bắt buộc .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.