Cả nhà giúp đệ giải thích cái này nhé !

Thảo luận trong 'PHP & MySQL' bắt đầu bởi Yachi_Emiko, 19/12/11.

  1. Yachi_Emiko

    Yachi_Emiko Active Member

    Cả nhà giải thích dùm đệ " nguyên lý hoạt động" của nó là sao vậy ?:p
  2. Lê Xuân Thành

    Lê Xuân Thành Staff Member

    cái này ở đâu ra vậy?
  3. nhoccon

    nhoccon Thành viên mới

    Sau 1 hồi tìm hiểu lọ mọ hết sức điên đầu và mất thời gian bắt đầu hiểu ra 1 chút:
    1. Sự khác nhau giữa preg_filter (gọi tắt là filter )và preg_replace (replace) trong trường hợp so khớp cấp độ mảng:
    - Filter: so khớp thì hiện ra, còn không thì coi như là không có, không hiểu là null hay là 0, cái này bác xem lại. Nghe vẻ là null vì không thấy in ra.
    - Replace: so khớp thì hiện ra không thì hiện phần tử gốc.
    2. $0: whole matched string (trong trường hợp này) dịch ra tiếng Việt là toàn bộ chuỗi so khớp "ngay trước đó".
    3. Nguyên tắc so khớp (trong trường hợp ví dụ thôi)
    - So khớp từ phần tử đầu tiên của mảng ban đầu ($subject ở trên) đến phần tử cuối cùng của mảng đó.
    - Mẫu so khớp ($pattern) sẽ duyệt từ trái qua phải với từng phần tử của $subject. Gặp được mẫu so khớp thì sẽ thay thế bằng mẫu thay thế tương ứng mảng thay thế ($replace).
    4. Đệ quy hay gọi lại:
    - Trường hợp này chính là $0 xuất hiện ở mẫu thay thế hay $replace.
    - Khi 1 mẫu so khớp đã được duyệt qua, nó sẽ không được duyệt lại nữa (tránh tình trạng lặp vô hạn).

    Giải thích dài dòng khó hiểu. Vào ví dụ cho dễ.
    Với trường hợp filter:
    Bắt đầu là phần tử '1': nó so khớp với '/\d/' nên sẽ chuyển thành 'A:$0', ở đây $0 chính là '1'. --> 'A:1'
    Áp dụng 4, 'A:1' sẽ so khớp với các phần tử tiếp theo của $pattern cụ thể đây là phần tử thứ 3
    'A:1' -> 'A:C:$0'
    $0 ở đây là 1 -> 'A:C:1'.

    'a': --> 'B:$0' --> 'B:a' --> 'B:C:$0' --> 'B:C:a'
    '2': --> 'A:$0' --> 'A:2'
    'b': --> 'B:$0' ---> 'B:b'
    '3': --> 'A:$0' ---> 'A:3'
    'A': --> null
    'B': --> null
    '4': --> 'A:$0' --> 'A:4'

    -> [0]:A:C:1, [1]: B:C:a, [2]: 'A:2', [3]: 'B:b', [4]: 'A:3', [5]: null, [6]: null, [7]: 'A:4'

    Với trường hợp replace : chỉ có sự khác biệt ở phần tử 'A' và 'B', khi so khớp không có thì sẽ chuyển thành chính nó trong mẫu kết quả chứ không thành null.
    Yachi_Emiko thích bài này.
  4. Yachi_Emiko

    Yachi_Emiko Active Member

    :) thấy huynh giải thích cũng nhiều nhiều, để đọc thu xem ....


    Sau khi đọc xong cũng tàm tạm hiểu, nhưng cũng chưa thông suốt , để ngâm cứu lại , dù sao cũng thank huynh 1 phat vì đã giúp đệ:p
  5. Yachi_Emiko

    Yachi_Emiko Active Member


    php.net đó huynh:D

    Chết, hình như ko có trong php.net . Ở đâu mất tju rồi, ko nhớ nữa. Chắc là trong đóng eboook ruj. Đầu óc lúc này. .. .:confused:

Chia sẻ trang này