None Capturing Group trong Regular Expression

Bởi Hai Nguyen vào February 2016

Chúng ta đã được học qua khái niệm Capturing Value trong bài các quy tắc Regular Expression căn bản thì trong bài này ta sẽ đến một khái niệm khác đó là None Capturing Group, đây là một khái niệm ngược lại với Capturing Value trong Regular Expression.

Như ta biết Capturing Value sẽ xác định giá trị trả về cho từng biểu thức RegEx con, nhưng đôi lúc ta lại muốn biểu thức con  đó không xuất hiện trong kết quả trả về thì làm thế nào? Để giải quyết vấn đề này ta dùng None Capturing Group trong Regular Expression.

Cú pháp: /regex:?regex/ trong đó dấu :? chính là cú pháp khai báo None Capturing Group.

Để dễ hiểu hơn ta tìm hiểu một số ví dụ nhé (Code PHP):

None Capturing Group Regular Expression

Ví dụ 1: Lấy tất cả chuỗi trong dấu ngoặc kép sau (lấy luôn dấu ngoặc kép) program "Hello World"

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

Nếu như bạn đã đọc qua phần Capturing Value và bài hàm preg_match trong php thì bạn sẽ thấy bất thường. Lẽ ra phải trả về 2 kết quả vì ta có:

Nhưng vì ta đã dùng None Capturing Group ở biểu thức RegEx con (?:.+) nên biểu  thức con này không được liệt kê kết quả trả về.

Nếu ta không dùng None Capturing Group thì code sẽ như sau:

Chạy kết quả là:

Một số ví dụ none capturing group khác

Ví dụ 2: Cho chuỗi $subject = 'program (None capturing group "Welcome To You")', Hãy lấy nội dung chữ None capturing group trong chuỗi trên, kết quả trả về bỏ đi đoạn Welcome To You

Kết quả:

Nếu bạn bỏ đi biểu thức None Capturing Group thì kết quả sẽ như sau:

Kết quả: