Giới thiệu về PCRE và một gói đơn giản - lich thi dau vong 1 ngoai hang anh 2025
PCRE
Perl Compatible Regular Expressions (PCRE) là một thư viện C xử lý biểu thức chính quy, được phát triển bởi Philip Hazel từ mùa hè năm 1997. Thư viện này lấy cảm hứng từ khả năng xử lý biểu thức chính quy trong ngôn ngữ lập trình Perl.
Gần đây, trong công việc của tôi có một phần yêu cầu xử lý nhận diện chuỗi, nên tôi đã sử dụng lại các biểu thức chính quy mà trước đó tôi từng làm quen với PHP. Trong C/C++, không có sẵn thư viện xử lý biểu thức chính quy, vì vậy tôi đã sử dụng PCRE. Đối với phát triển MFC, tôi đã cung cấp một thư viện liên kết tĩnh. Sau khi thêm file .lib và file .h vào dự án, bạn có thể bắt đầu sử dụng ngay lập tức.
Cú pháp Biểu thức Chính quy
Tiếp theo là một số cú pháp biểu thức chính quy. Tài liệu cú pháp chính thức của PCRE rất khoa học và nghiêm ngặt, đặc biệt là đối với các chi tiết như khớp tham lam (greedy match). Tuy nhiên, nếu bạn chỉ cần dùng ở mức cơ bản, có rất nhiều tài liệu trực tuyến cung cấp các ví dụ cụ thể để áp dụng.
Giới thiệu về hàm PCRE
Nguyên mẫu của hàm pcre_compile:
1#include <pcre.h>
2pcre *pcre_compile(const char *pattern, int options, const char **errptr, int *erroffset, const unsigned char *tableptr);
Chức năng: Hàm này sẽ biên dịch một biểu thức chính quy thành một biểu diễn nội bộ. Khi bạn cần khớp nhiều chuỗi, cách tiếp cận này sẽ giúp tăng tốc độ xử lý. Hàm này tương tự như pcre_compile2 nhưng thiếu tham số errorcodeptr.
pattern
: Biểu thức chính quy cần biên dịch.options
: Các tùy chọn điều khiển hành vi của biểu thức chính quy (có thể đặt bằng 0 nếu không cần).errptr
: Con trỏ đến thông báo lỗi (nếu có lỗi xảy ra).erroffset
: Vị trí xuất hiện lỗi trong chuỗi biểu thức chính quy.tableptr
: Con trỏ đến một mảng ký tự. Nếu không cần sử dụng bảng riêng, bạn có thể đặt giá trị NULL.
Nguyên mẫu của hàm pcre_exec:
1#include <pcre.h>
2int pcre_exec(const pcre *code, const pcre_extra *extra, const char *subject, int length, int startoffset, int options, int *ovector, int ovecsize);
Chức năng: Sử dụng mô hình đã biên dịch để khớp với chuỗi dữ liệu. Thuật toán của hàm này tương tự như trong Perl và trả về vị trí của chuỗi khớp.
code
: Mô hình biểu thức chính quy đã biên dịch.extra
: Con trỏ đến cấu trúc pcre_extra (có thể đặt NULL nếu không cần).subject
: Chuỗi cần kiểm tra.length
: Độ dài của chuỗi cần kiểm tra (đơn vị byte).- [kết quả tỷ Trang Cá Cược số](/post/6da9db6be188f4d7.html)
startoffset
: Vị trí bắt đầu tìm kiếm trong chuỗi. options
: Các tùy chọn bổ sung.ovector
: Mảng nguyên chứa kết quả khớp.ovecsize
: Kích thước của mảng ovector.
Đây là giải thích ngắn gọn về hai hàm thường dùng nhất trong PCRE. Thư viện tĩnh của PCRE cung cấp nhiều hàm khác nhau để phục vụ các mục đích khác nhau. Bạn có thể tham khảo thêm trên các blog hoặc tài liệu kỹ thuật để hiểu rõ hơn.
Một lớp bọc đăng ký 99bet sơ sài
Dưới đây là một đoạn mã minh họa cách sử dụng hàm pcre_exec:
1void COcxDemoDlg::pcre_exec_all(const pcre * re, PCRE_SPTR src, vector<pair<int, int>> &vc){
2 int rc;
3 int ovector[30];
4 int i = 0;
5 pair<int, int> pr;
6
7 rc = pcre_exec(re, NULL, src, strlen(src), i, 0, ovector, 30);
8
9 while (rc > 0){
10 i = ovector[1];
11 pr.first = ovector[2];
12 pr.second = ovector[3];
13 vc.push_back(pr);
14 rc = pcre_exec(re, NULL, src, strlen(src), i, 0, ovector, 30);
15 }
16}
Trong đoạn mã trên, vector lưu trữ các cặp chỉ số của toàn bộ chuỗi sau khi khớp. Đây chỉ là một ví dụ đơn giản nhằm minh họa cách sử dụng.