在Boost Spirit Qi中,我如何将每个字符匹配到下一个空格(带有预跳过)
In Boost Spirit Qi, how do I match every character up to the next whitespace (with pre-skip)
在boost::spirit::qi语法规则中,如何匹配字符串,直到并排除所提供的capper定义的下一个空白字符?
例如,如果语法是一组定义为的属性:
attributeList = '(' >> *attribute >> ')';
attribute = (name : value) | (name : value units);
如何匹配第一个队长角色之前的任何角色?
例如,对于name,我想预先跳过,然后匹配除":"或队长字符之外的所有字符。我是否必须在语法类中实例化一个队长,这样我就可以做一些类似的事情:
name = +qi::char_ !(skipper | ':');
或者我可以以某种方式访问现有提供的capper对象并直接引用它吗?此外,我不认为这需要用qi来包装::lexeme[]。。。
提前感谢您纠正我的方法
为了做到这一点,您需要抑制跳过,因此必须涉及qi::lexeme
(或者至少涉及qi::no_skip
,但您只会使用它来重新实现qi::lexeme
),并且要准确地完成您所写的内容,还需要跳过解析器。然后你可以写
qi::lexeme[ +(qi::char_ - ':' - skipper) ]
不过,要求似乎相当宽松。在标识符中甚至允许不可打印的字符,如钟形符号(ASCII 7),这是不寻常的。我不知道你到底想做什么,所以我不能为你回答这样的设计问题,但对我来说,有一个更标准的规则,比如,你会更高兴
qi::lexeme[ qi::alpha >> *qi::alnum ]
(举一个非常简单的例子。您的里程数可能因下划线等而异)
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- C++自定义流操纵器,用于更改流上的下一个字符串
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 下一个排列定义
- 查找下一个具有真值C++的数组索引
- 如何比较文件中包含的下一个字符
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 查找下一个文件失败,出现空格字符
- 在Boost Spirit Qi中,我如何将每个字符匹配到下一个空格(带有预跳过)