Tôi đang gặp sự cố với chức năng định dạng trong boost::regex_replace
. Tôi có thể gọi cho phiên bản một tham số của nó, nhưng không phải là hai tham số:Sự cố với hai chức năng định dạng tham số trong tăng :: regex_replace
e = "(^|>)([^<>]+)";
h_str = regex_replace(h_str, e, repl_quot, boost::match_default);
đâu repl_quot
được định nghĩa là
std::string const &repl_quot(boost::smatch const &what) {
boost::regex e("\"");
std::string repl(""");
static std::string;
str = regex_replace(what[0].str(), e, repl, boost::match_default);
return str;
}
Các công trình trên, nhưng tôi không thực sự muốn sử dụng tĩnh biến, vì vậy tôi đã thử những gì tôi nghĩ là một phiên bản thay thế tham số có thể chấp nhận được:
std::string const &repl_quot2(boost::smatch const &what, std::string &out) {
boost::regex e("\"");
std::string repl(""");
out = regex_replace(what[0].str(), e, repl, boost::match_default);
return out;
}
Nhưng regex_replace sẽ không chấp nhận điều này (lỗi trình biên dịch phức tạp). Tôi cố gắng để sử dụng phiên bản hai tham số dựa trên sau từ tài liệu Boost::Regex
:
mẫu basic_string regex_replace (const basic_string & s, const basic_regex & đ Formatter fmt, cờ match_flag_type = match_default);
Yêu cầu Các loại Formatter phải hoặc ... một functor unary, nhị phân hoặc ternary rằng tính chuỗi thay thế từ một cuộc gọi chức năng: hoặc fmt (gì) mà phải trả lại một container của char_type của được được sử dụng làm văn bản thay thế hoặc hoặc fmt (cái gì, ra) hoặc fmt (cái gì, , cờ), cả hai đều viết văn bản thay thế thành * out, và sau đó trả lại vị trí OutputIterator mới. Trong mỗi trường hợp, đối tượng match_results đại diện cho kết quả phù hợp.
Đã có lặp đi lặp lại yêu cầu được thông báo biên dịch lỗi, vì vậy ở đây nó là (hãy cẩn thận những gì bạn yêu cầu):
c: \ tăng \ tăng \ regex \ v4 \ regex_format.hpp Trong hàm thành viên `OutputIter boost :: re_detail :: format_functor_container :: operator() (const Match &, OutputIter, boost :: regex_constants :: match_flag_type, const Traits &) [với OutputIter = boost :: re_detail :: string_out_iterator, std: : allocator>>, Container = const std :: chuỗi & (*) (const boost :: smatch &, std :: string &), Đối sánh = boost :: match_results < __gnu_cxx :: __ normal_iterator, std :: allocator>>, std :: allocator, std :: allocator>>>>>, Traits = boost :: regex_traits_wrapper>>] ':
356 c : \ boost \ boost \ regex \ v4 \ match_results.hpp khởi tạo từ `OutputIterator boost :: match_results :: format (OutputIterator, Functor, boost :: regex_constants :: match_flag_type, const RegexT &) const [với OutputIterator = boost :: re_detail :: string_out_iterator, std :: allocator>>, Functor = const std :: string & (*) (const boost :: smatch &, std :: string &), RegexT = boost :: basic_regex>>, BidiIterator = __gnu_cxx :: __ normal_iterator, std :: allocator>>, Allocator = std :: allocator, std :: allocator>>>>] '
60 c: \ boost \ boost \ regex \ v4 \ regex_replace.hpp khởi tạo từ `OutputIterator boost :: regex_replace (OutputIterator, BidirectionalIterator, BidirectionalIterator, const boost :: basic_regex &, Formatter, boost :: regex_constants :: match_flag_type) [với OutputIter ator = boost :: re_detail :: string_out_iterator, std :: allocator>>, BidirectionalIterator = __gnu_cxx :: __ normal_iterator, std :: allocator>>, traits = boost :: regex_traits>, charT = char, Formatter = const std :: chuỗi & (*) (tăng const :: smatch &, std :: string &)]
80 c: \ tăng \ tăng \ regex \ v4 \ regex_replace.hpp instantiated từ `std :: basic_string, std :: phân bổ < _T2>> tăng :: regex_replace (const std :: basic_string, std :: allocator < _T2>> &, const boost :: basic_regex &, định dạng, tăng :: regex_constants :: match_flag_type) [với đặc điểm = boost :: regex_traits>, charT = char, Formatter = const std :: chuỗi & (*) (const boost :: smatch &, std :: string &)]
327 C: \ Dev-Cpp \ ví dụ \ wordrad \ xhtml_open.cpp instantiated từ đây
1064 c: \ tăng \ tăng \ regex \ v4 \ regex_format. hpp yêu cầu cho thành viên
begin' in
((tăng :: re_detail :: format_functor_container, std :: allocator>>, std :: allocator, std :: allocator>>>>>, boost :: regex_traits_wrapper>>> *) này) -> boost :: re_detail :: format_functor_container, std :: allocator>>, std :: allocator, std :: allocator>>>>>, boost :: regex_traits_wrapper>>> :: func ', là kiểu non-class ` const std :: string & (* const) (const boost :: smatch &, std :: string &) '1064 c: \ boost \ boost \ regex \ v4 \ regex_format.hpp yêu cầu cho thành viên
end' in
((tăng :: re_detail :: format_functor_container, std :: allocator>>, std :: allocator, std :: allocator> >>>>, boost :: regex_traits_wrapper>>> *) this) -> boost :: re_detail :: format_functor_container, std :: allocator>>, std :: allocator, std :: allocator>>>>>, tăng: : regex_traits_wrapper>>> :: func 'mà là loại phi lớp' std :: string const & (* const) (const boost :: smatch &, std :: string &)'
Bạn nên đăng lỗi mà bạn đang gặp phải. –
Dài ngớ ngẩn của nó. Tôi dự đoán bạn sẽ không làm cho đầu hoặc đuôi của nó. Mẫu của nó có liên quan hoặc một cái gì đó. Vấn đề là với những gì regex-replace được mong đợi như là một chữ ký cho tham số fmt, petaining cho các mẫu hoặc bất cứ điều gì. Thông báo lỗi là không thể giải mã được. – Mark
1064 c: \ boost \ boost \ regex \ v4 \ regex_format.hpp yêu cầu cho thành viên 'end 'trong' ((boost :: re_detail :: format_functor_container, std :: allocator >>, std :: allocator , std :: allocator >>>>>, boost :: regex_traits_wrapper >>> *) này) -> boost :: re_detail :: format_fu ... –
Mark