【发布时间】:2015-03-26 09:57:47
【问题描述】:
我正在编写一个包含解析电子邮件地址规则的语法。 规则声明为:
qi::rule<Iterator, ascii::space_type, std::string()> email;
它的定义是:
email
=
qi::lexeme[
+ascii::alnum
>> *(qi::char_(".") >> +ascii::alnum)
>> qi::char_("@")
>> +ascii::alnum
>> +(qi::char_(".") >> +ascii::alnum)
]
当我使用此语法解析文本时,解析器正确匹配电子邮件地址,但规则的合成属性与正确地址不对应。例如,如果文本包含地址 info.it@example.com,则综合属性为 info.@example。我认为这是由于 kleen 和 plus 运算符。
我正在使用 boost 1.48 并且我已经使用 boost 1.54 测试了代码,并且在该版本中它可以正常工作,但不幸的是我无法在我的项目中升级到它。
我可以解决这个问题,也许使用语义操作?
【问题讨论】:
标签: c++ parsing boost boost-spirit