在 Boost Spirit Qi 中,我如何将每个字符匹配到下一个空格(带预跳过)

In Boost Spirit Qi, how do I match every character up to the next whitespace (with pre-skip)

在 boost::spirit::qi 语法规则中,如何匹配由提供的 skipper 定义的不超过下一个空白字符的字符串?

例如,如果语法是一组定义为的属性:

attributeList = '(' >> *attribute >> ')';
attribute     = (name : value) | (name : value units);

如何匹配名称中不超过第一个船长字符的任何字符?

例如,对于名称,我想预先跳过,然后匹配除“:”或船长字符以外的所有字符。我是否必须在语法 class 中实例化一个船长,以便我可以做类似的事情:

name = +qi::char_ !(skipper | ':');

或者我能否以某种方式访问​​现有的提供的船长对象并直接引用它?另外,我认为这不需要包含在 qi:: lexeme[]...

在此先感谢您纠正我方法中的错误

为了做到这一点,您需要禁止跳过,因此必须涉及 qi::lexeme(或至少 qi::no_skip,但您只能使用它来重新实现 qi::lexeme),并且要精确地执行您编写的内容,您还需要跳过解析器。然后你可以写

qi::lexeme[ +(qi::char_ - ':' - skipper) ]

虽然要求似乎很宽松。在标识符中允许使用不可打印的字符(例如钟形符号 (ASCII 7))是不常见的。我不知道你到底想做什么,所以我不能为你回答这样的设计问题,但对我来说,你很有可能会更喜欢更标准的规则,比如

qi::lexeme[ qi::alpha >> *qi::alnum ]

(举一个非常简单的例子。你的里程数可能因下划线等而异)