Nếu bạn chỉ quan tâm rằng chuỗi không kết thúc với .jpg
hoặc .png
, bạn có thể sử dụng này:
^.+$(?<!\.jpg)(?<!\.png)
Các ^.+
là không thực sự cần thiết, nhưng tùy thuộc vào cách phân tích cú pháp JSON được mã hóa bạn có thể cần phải ép buộc regex tiêu thụ toàn bộ chuỗi. Nếu bạn đang sử dụng regex cho xác thực khác là tốt, bạn có thể muốn một cái gì đó phức tạp hơn, như:
^\w+(?:\.\w+)+$(?<!\.jpg)(?<!\.png)
Bạn có thể cố gắng sử dụng (?<!\.jpg|\.png)
, trong đó sẽ không làm việc vì hương vị regex Python là một trong những nhất hạn chế khi nói đến lookbehinds. PHP và Ruby 1.9+ sẽ chấp nhận nó vì mỗi lựa chọn thay thế có độ dài cố định. Họ thậm chí không phải là cùng chiều dài; (?<!\.jpg|\.jpeg|\.png)
cũng sẽ hoạt động. Chỉ cần không cố gắng đưa ra dấu chấm, như trong (?<!\.(?:jpg|jpeg|png))
; sự thay đổi phải ở mức cao nhất của lookbehind.
Java sẽ chấp nhận phiên bản thừa nhận bởi vì nó hoạt động nhiều hơn một chút vào thời gian biên dịch để xác định số ký tự tối đa mà đối tượng có thể cần phải khớp. Biểu thức lookbehind cần phải khá đơn giản, và nó không thể sử dụng các số phân định +
hoặc *
. Cuối cùng, các hương vị .NET và JGSoft không hề có bất kỳ hạn chế nào đối với các lookbehind. Nhưng Python thực hiện một nỗ lực rất đơn giản để tìm ra số ký tự chính xác mà lookbehind cần để khớp, tạo ra thông báo lỗi khó hiểu khi nó không thành công.
Nguồn
2012-04-07 15:23:30
công việc tuyệt vời! tuyệt vời – yash