Greedy là gì?

Phrase Programming
greedy matching

Với biểu thức chính quy (regular expression) và ký tự đại diện (wildcard) greedy mô tả một loại đối sánh (match) mà nó tiếp tục tìm kiếm đối sánh (match) ngay cả sau khi một đối sánh đã được thấy. Ví dụ: biểu thức chính quy trong ngôn ngữ Perl ". * E" dưới đây khớp với tất cả văn bản cho đến chữ cái cuối cùng "e" trong biến $ example. Ví dụ này trả về "Matched: Computer Hope,", không phải "Compute" vì văn bản có nhiều ký tự "e".

my $example = "Computer Hope";
$example =~ m/.*e/;
print "Matched: $&\n";

Một phương pháp để làm cho biểu thức chính quy không greedy (lazy matching), là thêm dấu chấm hỏi (?) sau dấu hoa thị (*), như được hiển thị bên dưới. Việc thêm dấu chấm hỏi sẽ thông báo cho máy tính ngừng tìm kiếm kết quả phù hợp sau khi tìm thấy một kết quả phù hợp.

my $example = "Computer Hope";
$example =~ m/.*?e/;
print "Matched: $&\n";
print "After: $'\n";

Chạy script trên trả về văn bản sau.

Matched: Compute
After: r Hope
Learning English Everyday