Tra cứu tài liệu cho các biểu thức TR1 hoặc (gần như tương đương) tăng cường regex. Cả hai hoạt động khá độc đáo trên các hệ thống Unix khác nhau. Các lớp regex TR1 đã được chấp nhận vào C++ 0x, vì vậy mặc dù chúng không chính xác là một phần của tiêu chuẩn, chúng sẽ sớm được hợp lý.
Chỉnh sửa: Để ngắt chuỗi thành các nhóm con, bạn có thể sử dụng sregex_token_iterator. Bạn có thể chỉ định một trong hai thứ bạn muốn so khớp làm mã thông báo hoặc những gì bạn muốn được so khớp làm dấu phân cách. Dưới đây là một bản demo quickie của cả hai:
#include <iterator>
#include <regex>
#include <string>
#include <iostream>
int main() {
std::string line;
std::cout << "Please enter some words: " << std::flush;
std::getline(std::cin, line);
std::tr1::regex r("[ .,:;\\t\\n]+");
std::tr1::regex w("[A-Za-z]+");
std::cout << "Matching words:\n";
std::copy(std::tr1::sregex_token_iterator(line.begin(), line.end(), w),
std::tr1::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));
std::cout << "\nMatching separators:\n";
std::copy(std::tr1::sregex_token_iterator(line.begin(), line.end(), r, -1),
std::tr1::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}
Nếu bạn cung cấp cho nó đầu vào như thế này: "Đây là một số văn bản 999", kết quả là như thế này:
Matching words:
This
is
some
text
Matching separators:
This
is
some
999
text
Nguồn
2010-02-08 20:49:13
Điều đó sẽ là 'preg_match_all (...)' sau đó, không phải 'preg_match (...)'. –
Có thể vì C++ Standard không chỉ định bất kỳ lớp biểu thức chính quy nào. –
Neil, nhưng sau khi tất cả php thậm chí không cung cấp tiêu chuẩn ;-) –