Trong các động cơ regex, .*X (tham lam) và .*?X (lười) có thể khớp các đoạn khác nhau của cùng một xâu. Xét mẫu dạng R∗L trong đó R là một lớp kí tự lặp (một chữ cái cố định, hoặc kí hiệu đặc biệt chỉ bất kì kí tự nào — như dấu .) còn L là một xâu hậu tố cố định (không rỗng). Cho một văn bản T, hãy tìm vị trí bắt đầu khớp trái nhất i (0-indexed) sao cho tồn tại j≥i để T[i..j) toàn bộ thoả R và T[j..j+∣L∣)=L. Trong số các j hợp lệ ứng với i trái nhất đó, gọi k=j−i là độ dài phần lặp đã khớp:
Nếu không có i nào thoả mãn trên toàn văn bản, in NO MATCH.
Dòng 1: hai token cách nhau bởi khoảng trắng — token thứ nhất mô tả R: hoặc một chữ cái thường (chỉ kí tự đó được lặp), hoặc từ khoá ANY (mọi kí tự đều thoả, tương đương . trong regex); token thứ hai là xâu hậu tố L (chữ cái thường, độ dài ≥1).
Dòng 2: văn bản T (chữ cái thường, xâu rỗng biểu diễn bằng @).
Nếu có khớp: một dòng ba số nguyên i lazy greedy cách nhau khoảng trắng. Nếu không: dòng NO MATCH.
Ví dụ: ANY ab và văn bản xxabab cho kết quả 0 2 4 (khớp trái nhất tại i=0; lười dừng ở độ dài lặp 2, tham lam ở độ dài lặp 4).
Ví dụ:
Đầu vào:
a b
aaab
Đầu ra:
0 3 3
Đầu vào:
ANY ab
xxabab
Đầu ra:
0 2 4
Đang tải editor...