Các regex cực kỳ có thể khá chậm và thiếu bộ nhớ. Tôi biết, bởi vì tôi đã tạo ra một cái. Nó có thể tokenize những gì không nên được tokenized bởi một regex. :-) nếu bạn muốn có một liên kết ... Bây giờ ... Tôi chưa bao giờ điểm chuẩn "nhỏ" regexes vì vậy tôi không biết tốc độ của họ. Họ chắc chắn là nhỏ gọn để viết.
Ah tôi đã quên, regexes là The Evil. Vấn đề chính của họ là chúng giống như búa và khi bạn có chúng, bạn cố gắng làm cho mọi vấn đề giống như móng tay. Vì vậy, vấn đề chính của họ là trong người dùng (lập trình viên).
Giới hạn "lớn" đầu tiên: Javascript chỉ triển khai một tập hợp con của chúng, không hỗ trợ Unicode. Thông thường, ngôn ngữ bạn sử dụng phía máy chủ có triển khai hoàn chỉnh hơn, do đó bạn bị giới hạn bởi js. Ngay cả việc triển khai khá hoàn chỉnh như .NET có giới hạn lớn: không hỗ trợ cho các cặp thay thế và không hỗ trợ cho các ký tự "được tạo" (các ký tự sử dụng dấu kết hợp). Nhưng, như thường lệ, vấn đề nằm trong lập trình viên. Làm thế nào nhiều lập trình viên biết Unicode biết phức tạp của Unicode, của các bộ chữ số khác nhau, của dấu phụ?
Giới hạn "lớn" thứ hai: bảo trì. Chúng phức tạp và không thể đọc được khi chúng được viết. Nhưng vài tháng sau? Họ trở nên tồi tệ hơn! Và nếu bạn phải đào tạo một lập trình mới, bây giờ anh ta phải học thêm một ngôn ngữ nữa: regex.
Giới hạn "lớn" thứ ba: chúng ẩn quá nhiều. Bạn thấy \d\s\d
. Nó có nghĩa là gì? một chữ số một không gian và một chữ số? Chắc chắn rồi. Nhưng cả hai \d
và \s
trong .NET Regexes "ẩn" một microworld. \d
"đối sánh" bất kỳ chữ số không phải châu Âu nào (và có nhiều chữ cái trong Unicode). \s
"phù hợp" rất nhiều không gian bí truyền mà tôi thậm chí không biết tên ... Tôi thậm chí không muốn nghĩ về nó. Chúng giống như tảng băng trôi. Chỉ 1/8 là ra khỏi nước, trong khi 7/8 bị ẩn. Nhưng đó là 7/8 có thể sẽ giết bạn.
Bạn thực sự cần chỉ định công cụ regex bạn đang sử dụng, vì mỗi công cụ có giới hạn khác nhau. Một số đã đi xa như vậy để cho phép một số regexes giống ngữ pháp. Nhìn qua tchrist's (Tom Christiansen) câu trả lời ở đây trên SO bạn có thể có được một ý tưởng về sức mạnh một số động cơ regex đã đạt được. – ninjalj