Nhiều lập trình viên biết niềm vui của việc đưa ra một biểu thức chính quy nhanh chóng, những ngày này thường với sự trợ giúp của một số dịch vụ web, hoặc theo truyền thống hơn tại dấu nhắc tương tác, hoặc có thể viết một tập lệnh nhỏ có biểu thức chính quy đang được phát triển và một tập hợp các trường hợp thử nghiệm . Trong cả hai trường hợp, quá trình này lặp đi lặp lại và khá nhanh chóng: tiếp tục hack tại chuỗi tìm kiếm khó hiểu cho đến khi nó khớp và nắm bắt những gì bạn muốn và sẽ từ chối những gì bạn không muốn.
Đối với một kết quả trường hợp đơn giản có thể là một cái gì đó như thế này, như là một biểu thức chính quy của Java:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
Nhiều lập trình viên cũng biết nỗi đau của việc cần phải chỉnh sửa một biểu thức chính quy, hoặc chỉ viết mã xung quanh một biểu thức chính quy trong một cơ sở mã kế thừa. Với một chút chỉnh sửa để phân tách nó, regrec ở trên vẫn rất dễ hiểu đối với bất kỳ ai quen thuộc với regexps, và một cựu chiến binh regrec nên xem ngay những gì nó làm (trả lời ở cuối bài, trong trường hợp ai đó muốn tập thể dục tự tìm ra nó).
Tuy nhiên, mọi thứ không cần phải trở nên phức tạp hơn nhiều cho một regexp để trở nên thực sự viết chỉ điều, và ngay cả với tài liệu hướng dẫn siêng năng (mà tất cả mọi người tất nhiên không cho tất cả regexps phức tạp họ viết ...), sửa đổi regexps trở thành một nhiệm vụ khó khăn. Nó có thể là một nhiệm vụ rất nguy hiểm quá, nếu regexp không phải là cẩn thận đơn vị thử nghiệm (nhưng tất cả mọi người tất nhiên có kiểm tra đơn vị toàn diện cho tất cả regexps phức tạp của họ, cả tích cực lẫn tiêu cực ...).
Vì vậy, câu chuyện dài ngắn, có một giải pháp đọc / thay thế cho các biểu thức thông thường mà không mất sức? Làm thế nào các regrec ở trên trông như thế nào với một phương pháp thay thế? Bất kỳ ngôn ngữ nào cũng tốt, mặc dù một giải pháp đa ngôn ngữ sẽ là tốt nhất, với các biểu thức chính quy là đa ngôn ngữ.
Và sau đó, những gì regrec trước đó làm là: phân tích một chuỗi số theo định dạng 1:2:3.4
, bắt từng số, trong đó khoảng trắng được cho phép và chỉ 3
được yêu cầu.