06/04/2021, 14:46

Negative Và Positive Lookahead trong Regular Expression - Học Regular Expression PHP

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é. ...

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 'Zaidap.com@gmail.com thehalfheart@facebook.com hoclaptrinh@yahoo.com Zaidap.com.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 = 'Zaidap.com@gmail.com thehalfheart@facebook.com hoclaptrinh@yahoo.com Zaidap.com.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] => Zaidap.com
            [1] => Zaidap.com.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

Tạ Quốc Bảo

23 chủ đề

7270 bài viết

0