- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试解析嘈杂的输入,理想情况下,我将能够查看节是否与规则匹配,如果它确实获得了我需要的数据并丢弃其余数据。
我要的数据如下
Event: Newstate
Channel: SIP/104-000001bb
ChannelState: 6
ChannelStateDesc: Up
我想确保事件属于新状态。
我需要 channel 状态。其余的我不关心(现在)所以我想忽略它,我希望它灵活并接受重要内容之间的任何旧废话,真的我不想说忽略这一行,而是忽略事件和我捕获值的 channel 状态结束之间的任何内容。
到目前为止我有:
typedef boost::fusion::vector2<std::string, std::string> vect;
qi::rule<std::string::iterator, vect(), space> rule_ =
lit("Event: ") >> *char_("a-zA-Z") >>
qi::omit[ *char_ ] >>
"ChannelState: " >> *char_("0-9") >>
qi::omit[ *char_ ];
但由于某种原因这不起作用,当我这样做时我总是得到错误的返回:
vect v;
bool r=qi::parse(it, str.end(), rule_, v);
编辑:Boost 版本 1.42 编译器 g++ 4.4 Spirit 0x2020
最佳答案
记住:Spirit 的解析器是贪婪的。这意味着如果你做 qi::omit[ <something> ]
, 它将继续省略字符直到 <something>
不再相遇。自 <something>
字面意思是 anything(char_
匹配任何字符,所以 *char_
匹配所有字符),它将吃掉整个字符串的其余部分。然后它会引发错误,因为它从未到达“ChannelState:”。
您的方法根本行不通。你必须有一些切断开关来停止 *char_
从吃一切。
我不明白你为什么不把它们全部解析成一个 std::map
,而不是零敲碎打。然后你就可以挑选出你想要的元素。你说你还不需要一些元素,所以忽略它们。
这将按如下方式完成:
//Includes
#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/adapted/std_pair.hpp>
//Code
using namespace boost::spirit;
using ascii::char_;
using ascii::string;
qi::rule<std::string::iterator, std::pair<std::string, std::string>() > pair_rule =
*(char_ - ':') >> ':' >>
qi::omit[*ascii::space] >>
*(char_ - eol) >> (eol || eoi);
qi::rule<std::string::iterator, std::map<std::string, std::string>() > map_rule =
+pair_rule;
std::map<std::string, std::string> v;
bool r = qi::parse(test.begin(), test.end(), map_rule, v);
请注意,这适用于 Boost 1.47。我怀疑它在早期版本上会失败。
Boost version 1.42 compiler g++ 4.4 Spirit 0x2020
那些都比较老了。你应该考虑升级。 Boost 现在高达 1.47。
关于c++ - Boost spirit语法匹配嘈杂的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011994/
我正在尝试使音频通过低通滤波器,以便从中滤除噪声。但是,wav的输出非常嘈杂,我无法理解为什么。找到原始的和过滤后的WAV及其对应的内容。链接下方的频谱图。 enter link descriptio
我使用 Arduino 微 Controller 从电位计收集了一些数据。这是以 500 Hz 采样的数据(这是很多数据): http://cl.ly/3D3s1U3m1R1T?_ga=1.17893
我的问题是:是否有最小化算法,最好用 Python 实现,可以对一个慢速(~1-10 秒)的函数进行操作,并从实时系统中获取数据,这不会超过几个几个小时才能完成? 我有一个 FPGA,它对一些传感器数
我正在处理一个数据集,如果一个例子被标记为正面,那么它绝对是正面的。不幸的是,对于负类,如果标签被标记为负类,则不能说同样的情况(并且它可能会变成正类)。此外,标记为负面的示例数量远远多于标记为正面的
这个问题在这里已经有了答案: Perlin Noise 2D: turning static into clouds (1 个回答) 关闭 7 年前。 我在执行 perlin 噪音时遇到了问题。出于
我有一个 Google Pixel 3 并且正在使用 Flutter 的 camera插件版本 0.8.1 .CameraPreview模糊、嘈杂、放大,并且通常看起来比 Android 的相机应用差
我有以下形式的原始 pcm 数据: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00
我是一名优秀的程序员,十分优秀!