Bài 10: Negative Và Positive Lookahead trong Regular Expression

Nếu Lookbehind dùng để kiểm tra điều kiện ở phía trước chuỗi thì Lookahead ngược lại, nó sẽ kiểm tra điều kiện ở phía sau. Cũng tương tự như lookbehind sẽ có 2 dạng, đó là Positive và Negative.

Không có gì bằng thấy tận mắt, sờ tận tay đúng không nào? Nên ta sẽ bắt đầu một ví dụ nhé.

Ví dụ 1: Lấy phần đầu của email có phần đuôi là @gmail.com trong chuỗi 'freetuts@gmail.com thehalfheart@facebook.com hoclaptrinh@yahoo.com freetuts.net@gmail.com'.

Hình như ví dụ này hơi quen quen, các bạn nhớ ra chưa nhỉ ? Nếu nhớ ra thì comment ở dưới để tôi biết với nhé :D.

Ta sẽ giải bài này thông qua Positive Lookahead Regular Expression.

Positive Lookahead Trong Regular Expression

Cú pháp: (?=)

Ở ví dụ một ta sẽ dùng Positive Lookahead để xác định câu partern 'chuỗi nào có phần đuôi bằng @gmail.com thì sẽ chọn'. Các bạn xem code nhé.

$str = 'freetuts@gmail.com thehalfheart@facebook.com hoclaptrinh@yahoo.com freetuts.net@gmail.com';
preg_match_all('/[^\s]+(?=@gmail\.com)/', $str, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';

Chạy lên và kết quả là:

Array
(
    [0] => Array
        (
            [0] => freetuts
            [1] => freetuts.net
        )
)

Bạn có thấy chuỗi partern mình có thêm một đoạn (?=@gmail\.com) không, đoạn này chính là Positive Lookahead xác định chuỗi @gmail.com. Còn đoạn partern đầu tiên [^\s]+ là tìm dãy ký tự cho tới khi gặp khoảng trắng. Và kết quả đúng như mong đợi.

Negative Lookahead trong regular expression

Cú pháp: (?!)

Ở phần trên ta đã tìm được phần đầu của những email có phần đuôi là @gmail.com, bây giờ giả sử tôi muốn tìm kiếm phần đầu của những email có phần đuôi không phải là @gmail.com. Áp dụng cú pháp và tương tự như Pisitive Lookahead ta có lời giải như sau:

.. xin lỗi tutorials bị lỗi, mình sẽ cập nhật sớm

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Facebook để được hỗ trợ nhanh nhất.