2011-01-03 29 views
9

thể trùng lặp:
A Regex that will never be matched by anythingMột regex Perl đơn giản đảm bảo không bao giờ khớp với một chuỗi?

Tôi có một kịch bản mà phải mất một regex như một tham số. Theo mặc định tôi muốn thiết lập các regex để cái gì đó sẽ không bao giờ phù hợp với bất kỳ chuỗi, vì vậy tôi chỉ có thể nói

if ($str =~ $regex) 

mà không ví dụ phải kiểm tra xác định ($ regex) đầu tiên.

tôi đến với

qr/[^\s\S]/ 

nhưng không biết nếu điều này sẽ phù hợp với một số nhân vật utf8 mà không phải là một không gian cũng không một tổ chức phi không gian.

Trả lời

20
+0

giải pháp MJD là tốt hơn so với bất cứ điều gì khác được cung cấp tại đây hoặc trên các câu hỏi dup cáo buộc rằng đây xứng đáng được lưu giữ. – tchrist

+0

@tchrist: Từ quan điểm của tôi đã được thừa nhận hẹp, chỉ là về bất cứ điều gì bởi MJD là vàng nguyên chất. Người đàn ông là một Perl Alchemist hoặc một cái gì đó. – Hugmeir

+0

Để chiếu sáng: mẫu rỗng '//' hoặc '(? :)' không xác nhận bất cứ điều gì, và do đó luôn phù hợp. '(?!)' là một lookahead tiêu cực cho mẫu rỗng (cái gì nằm giữa '!' và ')' là phần thân của xác nhận) và do đó không bao giờ có thể khớp. – hobbs

5

Kết hợp một bảng chú giải âm cho một ký tự tùy ý, sau đó là kết quả phù hợp cho ký tự đó, ví dụ:

/(?!x)x/ 

Làm việc trên tất cả các trường hợp thử nghiệm mà tôi đã ném vào đó. Dưới đây là một số thử nghiệm trên rubular.

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