regex.ipp

来自「CGAL is a collaborative effort of severa」· IPP 代码 · 共 74 行

IPP
74
字号
/*=============================================================================    Copyright (c) 2002-2003 Hartmut Kaiser    http://spirit.sourceforge.net/    Use, modification and distribution is subject to the Boost Software    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at    http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#ifndef BOOST_SPIRIT_REGEX_IPP#define BOOST_SPIRIT_REGEX_IPP///////////////////////////////////////////////////////////////////////////////#include <boost/spirit/core/primitives/impl/primitives.ipp>///////////////////////////////////////////////////////////////////////////////namespace boost { namespace spirit {namespace impl {/////////////////////////////////////////////////////////////////////////////////inline const char* rx_prefix(char) { return "\\A"; }inline const wchar_t* rx_prefix(wchar_t) { return L"\\A"; }///////////////////////////////////////////////////////////////////////////////////  rx_parser class/////////////////////////////////////////////////////////////////////////////////template <typename CharT = char>class rx_parser : public parser<rx_parser<CharT> > {public:    typedef std::basic_string<CharT> string_t;    typedef rx_parser<CharT> self_t;    rx_parser(CharT const *first, CharT const *last)    {         rxstr = string_t(rx_prefix(CharT())) + string_t(first, last);     }    rx_parser(CharT const *first)    {         rxstr = string_t(rx_prefix(CharT())) +             string_t(first, impl::get_last(first));     }    template <typename ScannerT>    typename parser_result<self_t, ScannerT>::type    parse(ScannerT const& scan) const    {        boost::match_results<typename ScannerT::iterator_t> what;        boost::regex_search(scan.first, scan.last, what, rxstr,            boost::match_default);        if (!what[0].matched)            return scan.no_match();        scan.first = what[0].second;        return scan.create_match(what[0].length(), nil_t(),            what[0].first, scan.first);    }private:    boost::reg_expression<CharT> rxstr;    // regular expression to match};}   // namespace impl///////////////////////////////////////////////////////////////////////////////}} // namespace boost::spirit#endif // BOOST_SPIRIT_REGEX_IPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?