问题标签 [boost-xpressive]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 Boost Xpressive 进行不区分大小写的匹配
我只是无法获得regex_match
查找不区分大小写匹配项的功能。即使boost::xpressive::regex_constants::icase
已定义icase
并且我使用了强制转换(因此Xpressive的方法没有歧义),我得到一个编译错误(VS2010):
错误 C2440:“类型转换”:无法从“const boost::xpressive::detail::modifier_op”转换为“boost::xpressive::regex_constants::match_flag_type”
一些要重现的代码:
你知道问题可能是什么吗?
c++ - Boost Xpressive - 为什么这个正则表达式的失败案例是指数的?
我正在使用一个简单的正则表达式来匹配从操作系统读取的具有以下格式的字符串:
时间戳:{逗号分隔的值列表}
其中时间戳是无符号的,值是无符号的
为此,我使用 boost::xpressive 使用以下正则表达式
对于成功案例,一切正常,基准测试表明正则表达式需要大约 80 微秒来匹配以下字符串:
如果输入字符串在其中一个值中包含负值,则性能会显着降低,因此如果 value4 为负,则正则表达式需要 13 秒来报告失败。
如果 value5 为负数,则花费的时间甚至更长。
为什么失败案例的性能如此糟糕?
我已通过将原始正则表达式更改为:
即对逗号分隔的列表进行匹配是非贪婪的。
在更改后的版本中,失败场景的表现与成功场景一样好(或略好于)。
c++ - 如何正确解析带有 Boost.Xpressive 的小胡子?
我试图用出色的Eric Niebler的优秀Boost.XPressive编写一个小胡子解析器。但是由于这是我的第一个解析器,所以我不熟悉编译器编写者的“正常”方法和行话,经过几天的反复试验后,我感到有些失落。所以我来到这里,希望有人能告诉我我的 n00bish 方式的愚蠢;)
这是我要提取的带有胡须模板的 HTML 代码 ( http://mustache.github.io/ ):
Now <bold>is the {{#time}}gugus {{zeit}} oder nicht{{/time}} <i>for all good men</i> to come to the {007} aid of their</bold> {{country}}. Result: {{#Res1}}Nullum <b>est</b> mundi{{/Res1}}
我有以下无法单独解决的问题:
- 我编写的解析器不会打印任何内容,但也不会在编译时发出警告。我之前设法让它打印出部分小胡子代码,但从未正确打印出所有部分。
- 我不知道如何遍历所有代码以查找所有事件,然后也可以像使用
smatch what;
变量一样访问它们。该文档仅显示如何使用“what”查找第一次出现或如何使用“iterator”输出所有出现。- 其实我需要两者的结合。因为一旦发现某些东西,我需要质疑标签名称和标签之间的内容(“什么”会提供但“迭代器”不允许) - 并采取相应的行动。我想我可以使用“动作”,但如何?
- 我认为应该可以一口气完成标签查找和“标签之间的内容”,对吗?或者我是否需要为此解析 2 次 - 如果需要,如何解析?
- 是否可以像我一样解析左括号和右括号,因为总是有2 个括号?或者我应该按顺序执行还是使用
repeat<2,2>('{')
? - 我仍然有点不确定哪些情况是必要的
keep()
,by_ref()
什么时候最好不要使用它们。 sregex_token_iterator cur( str.begin(), str.end(), html, -1 );
我在这里找不到迭代器的第 4 个参数的其他选项-1,它输出除匹配标签之外的所有选项。- 我的解析器字符串是否正确找到嵌套的胡子标签?
c++ - 处理正则表达式字符串时,wsregex::compile 崩溃(内存泄漏)?
我想了解为什么当我尝试使用带有以下字符串的 BOOST 的 wsregex::compile 时我的程序崩溃:
在正则表达式伙伴中,一切似乎都很好。我在 RegexBuddy 上使用了 JGSoft 风格选项。
我正在验证以下内容:
你们能帮帮我吗。非常感谢。
c++ - 如何在没有整个提升的情况下使用 boost.xpressive?
我正在尝试在 VC 2008 中使用正则表达式,但是我不能使用 boost 库(或者至少是整个 boost 库)。
我已经看到 boost.xpressive 中的文件正在使用其他 boost 目录中的文件。
出于好奇, boost.xpressive 的本教程提供了一种从不再可用的链接下载 xpressive.zip 的方法。
我假设 xpressive.zip 包含 xpressive 的最小依赖项。
我在哪里可以获得“最小便携式 boost.xpressive”?
boost - 使用 xp::sregex::compile 时 regex_byref_matcher.hpp 的路径
我注意到,当我在代码中使用 xp::sregex::compile 时,字符串 ...\3rdparty\boost-1_58\boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp (带有我的本地路径)出现在二进制代码,在发行版中编译。有没有办法删除它?
boost - 如何使用 boost::xpressive 在语义动作中使用结构填充向量
每次检测到匹配项时,我都试图将数据结构插入到向量中,但即使编译也失败了。代码如下:
由于我在内部使用 Data 对象并且它无法懒惰地使用它(我想,我不太确定),因此无法编译“push_back”语义操作。
请问,有人可以帮我解决这个问题吗?
注意-我不幸地绑定到 MS VS 2010(不完全符合 c++11),所以请不要使用可变参数模板和 emplace_back 解决方案。谢谢你。
boost - 使用 boost xpressive 会降低性能
最近我一直在使用 boost xpressive 来解析文件。这些文件每个大小为 10 MB,将有数百个文件需要解析。
Xpressive 很好用,语法清晰,但问题在于性能。令人难以置信的是它在调试版本中的抓取方式,而在发布版本中,每个文件花费的时间超过一秒。我已经针对旧的普通 get_line()、find() 和 sscanf() 代码进行了测试,它可以轻松击败 xpressive。
我知道类型检查、回溯等是有代价的,但这对我来说似乎太过分了。我怎么想,我做错了什么?有什么方法可以优化它以以不错的速度运行吗?是否应该努力将代码迁移到 boost::spirit?
我准备了一个精简版的代码,其中嵌入了几行真实文件,以防有人测试和帮助。
注意 - 作为要求,必须使用 VS 2010(不幸的是,不完全符合 c++11)
请注意 VS 2010 的限制。
c++ - 递归 boost::xpressive 使用太多内存
嗨 boost::xpressive 用户,
尝试使用 boost::xpressive 解析一些决策树时出现堆栈溢出错误。它似乎适用于达到一定大小的树,但在“大”树上失败,其中“大”似乎意味着大约 3000 个节点,而 gdb 的堆栈深度为 133979 帧。我想我需要以某种方式优化正则表达式,但没有 .* 任何地方,所以我不知道从这里去哪里。
在这里, s 未定义,因为它是一个不适合问题的 75000 个字符的字符串。如何修改这些表达式以使匹配在更小的空间内执行?
c++ - Boost Xpressive - 字段“m_rx”的类型不完整
我在编译包含类型成员字段的类头时遇到问题sregex
。
该类定义为:
类 cpp 文件编译没有任何问题,但是当我将标头包含到使用该类的 cpp 文件中时,编译器给出以下错误:
我在这里做错了什么???