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

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

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 Group Facebook để được hỗ trợ nhanh nhất.