01/10/2018, 14:24

Hỏi cách tách string bằng preg_match php

em có 1 đoạn chuỗi sau : xin chao minh la {Duy|Minh|Lam|Chien} sinh nam {1998|2000|2001}

em muốn lấy chuỗi trong { } tức là Duy|Minh|Lam|Chien và 1998|2000|2001.

em dùng preg_match với regex là /.*{(.*)}.*{(.*)}.*/ và lấy được kết quả mong muốn.

nhưng ở đây là 2 cặp { } ví dụ có n cặp { } thì regex là gì em chưa nghĩ ra, mong a/c giúp đỡ!

Khoa NTA viết 16:28 ngày 01/10/2018

Bạn thử chuỗi này xem:

(?=\{([^\}]+)\})

Test bằng pythex ở đây.

Ice Tea viết 16:39 ngày 01/10/2018

Sao bác lại phải bỏ cái look ahead ?= vào nhỉ?

Khoa NTA viết 16:35 ngày 01/10/2018

Cho nó sạch chút thôi, hợp nhãn của tui vì nhóm 2 lần thì nó không đẹp mặc dù vẫn xài được:

EDIT: Hoặc có thể dùng:

\{([^\}]+)

Kết quả sạch đẹp và tối ưu hơn

Hoàng Văn Duy viết 16:30 ngày 01/10/2018

(?={([^}]+)})

e cảm ơn nha, được rùi ạ. regex này khó quá đi

Hoàng Văn Duy viết 16:36 ngày 01/10/2018

{([^}]+)

a có thể chỉ cho e chỗ học regex này ko ah

Khoa NTA viết 16:26 ngày 01/10/2018

Xài nhiều quen thôi :v mình học qua Google, chỉ cần regex cheat sheet là có đầy, cú pháp thì không có gì khó, quan trọng là tìm được điểm khác biệt duy nhất giữ chỗ mình cần tìm và những chỗ khác rồi viết ra cái regex.
Bạn có thể search trên diễn đàn, nhiều người hỏi về regex lắm, đem mấy cái đó ra tập sử dụng là được.
Có thể tham khảo ở đây.

Bài liên quan
0