2009-05-02 56 views

Trả lời

8

PCRE là thư viện regex tiêu chuẩn de-facto cho C (và nó cũng làm việc trong C++).

(What soạn thảo của bạn đang làm tôi không biết sử dụng một thư viện như PCRE hoặc bất kỳ của những người khác đề nghị không thay đổi cú pháp của C -.. Định nghĩa regex của bạn sẽ luôn được tổ chức trong chuỗi)

0

Tôi không nghĩ rằng bạn có thể thực hiện một regex trong C++ mà không cần sử dụng một số thư viện của bên thứ ba. Qt và Gtk +/Gtkmm đều đi kèm với những thứ này. Visual C++ 2008 cũng đi kèm với khả năng này.

1

Boost.Xpressive cho phép bạn viết regexs như dây đàn (như trong Boost.Regex) hoặc tĩnh với các mẫu biểu. Nó tương tự như Boost.Spirit cho ngữ pháp.

Ví dụ, hai là tương đương:

sregex rex1 = sregex::compile("(\\w+) (\\w+)!"); //normal string based way 
sregex rex2 = (s1= +_w) >> ' ' >> (s2= +_w) >> '!'; //expression template way 
2

Regular Expressions là một phần của C++ mở rộng thư viện tiêu chuẩn quy định tại TR1 (see Chapter 7 in Documentation). dinkumware library tức là đã triển khai các tiện ích mở rộng regEx. Tôi không biết về triển khai khác.

Các tiện ích đơn giản và dễ sử dụng.

1

Chỉ để hoàn thành, Qt có QRegExp có thể thực hiện đối sánh cụm từ thông dụng.
Điều này thường tốt nếu bạn cần một regexp nhỏ cho một tính năng từ xa trong ứng dụng Qt lớn của bạn. Đối với bất cứ điều gì nghiêm trọng hơn, PCRE chắc chắn là con đường để đi.

1

Không, C++ không có, và sẽ không nhận được, regexes bằng cách sử dụng /.../ cú pháp được sử dụng trong một số ngôn ngữ. Trình chỉnh sửa của bạn sai. Khi tất cả các câu trả lời khác cho thấy, các thư viện regex cho C++ đều tồn tại (Và một được sắp xếp để đưa vào C++ 0x), nhưng chúng xử lý các chuỗi, được giới hạn bởi ", chứ không phải dấu gạch chéo, vì vậy chúng không phải là lý do

0

Nếu bạn đang ở trong Visual Studio, bạn có thể sử dụng Greta (tìm kiếm greta regex) nhưng tôi nghĩ rằng đó là một chút chậm hơn so với tăng. Nó thực sự dễ sử dụng mặc dù.

1

Nếu bạn sử dụng studio trực quan và tính di động không phải là vấn đề lớn, bạn có thể nhận kết quả khá nhanh (không tải xuống, không cài đặt) với cơ sở ATL dễ thương được gọi là CAtlRegExp. Nó chứa phân tích và kết hợp RegEx đầy đủ và hiệu quả (online sample). Tuy nhiên, không so sánh hiệu suất của nó với BOOST.

Các vấn đề liên quan