Lập trình 22/09/2026 5 phút

Tham lam vs lười trong regex: vì sao .* nuốt cả chuỗi còn .*? thì không

Cùng một mẫu, chỉ thêm một dấu ?, mà kết quả khác hẳn — và tốc độ cũng vậy. Bài này đo thật bằng python re: greedy .* nuốt cả '<b>xin</b> và <i>bạn</i>' thành một match, lazy .*? tách đúng bốn thẻ; và trên input 200k ký tự, greedy chậm hơn lazy 785 lần vì phải nhả dần (backtrack). Hiểu cơ chế để chọn đúng và tránh lỗi trích sai.