将spirit和phoenix解析为std::字符串
boost spirit and phoenix parsing into a std::string
如何解析为具有boost spirit和phoenix的std::字符串?
例如,下面我成功地将1234解析为int,但当我尝试解析为字符串时,解析失败。如果我用+qi::alnum
替换qi::alnum
,则解析成功,但字符串编号具有不需要的值"4"。它看起来像气:alnum只匹配一个字符;如何解析多字符字母数字字符串?
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <iostream>
#include <string>
int main() {
namespace qi = boost::spirit::qi;
namespace phoenix = boost::phoenix;
std::string s("--1234--");
{
int number = 0;
bool success = qi::parse(s.begin(), s.end(),
qi::lit("--") >> qi::int_[ phoenix::ref(number) = qi::_1 ] >> qi::lit("--")
);
std::cout << success << " qi::int_ parses: " << number << std::endl;
}
{
std::string number;
bool success = qi::parse(s.begin(), s.end(),
qi::lit("--") >> qi::alnum[ phoenix::ref(number) = qi::_1 ] >> qi::lit("--")
);
std::cout << success << " qi::alpha parses: " << number << std::endl;
}
return 0;
}
使用qi::as_string,例如
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <iostream>
#include <string>
int main() {
namespace qi = boost::spirit::qi;
namespace phoenix = boost::phoenix;
std::string s("--1234--");
std::string number;
bool success = qi::parse( s.begin(), s.end(),
qi::lit("--")
>> qi::as_string [ +qi::alnum ] [ phoenix::ref(number) = qi::_1 ]
>> qi::lit("--"));
std::cout << success << " qi::as_string parses: " << number << std::endl;
return 0;
}
相关文章:
- 我可以重新分配/覆盖std::字符串吗
- 如何将这个std::字符串转换为std::基本字符串
- std::字符串与 PCWSTR 的对话
- 重载 std::字符串运算符+ 用于打印枚举名称
- 从std::字符串创建OssBitString
- std::字符串擦除以删除最后一个字母
- 如何使用 C++ 中的原语初始化类(如 std::字符串从 const char* 初始化)
- std::字符串串联操作
- 如何有效地将一个大std::字符串的一部分转换为float
- 转义std::字符串中的特殊字符
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- C++std::字符串流到常量字符*的转换
- 如何将std::字符串转换为不同的字符串类
- 对齐C++字符串类型问题 std::字符串到 TStr
- std::字符串到字符*而不切割字节
- 编写具有非ASCII数据的std ::字符串
- 将 Delphi 的字符串转换为 std::字符串用于C++
- std::字符串添加到字符*
- 字符* 和 std::字符串和常量字符*之间的转换
- 用指针访问std ::字符串中的元素