是boost:regex块大小限制
Is boost:regex block size limited?
我有相当大的文本文件解析boost:regex。为了使处理过程更容易,首先我决定将大文件分割成块,以便将来解析每个块。
我使用下一个正则字符串:
FIRST1.*?FIRST2.*?FIRST3((.*?r*n*)*)LAST1.*?LAST2.*?LAST3
它允许我在"FIRST1 FIRST2 FIRST3"answers"LAST1 LAST2 LAST3"之间接收我想要的一切。
在它们之间存在许多行和许多文本(超过20,000字节)。但这行不通。如果我将文本分成两部分(part1 ~ 10000字节和part2 ~ 10000字节),并尝试使用以下正则表达式:
- first part1 last -一切解析良好
- 第一部分第2部分持续-一切解析良好
- 第一部分第二部分持续-休息
我认为这可能是boost:regex的限制,并尝试在这里:在线regex,它仍然是一样的。
看起来part1part2对于正则表达式块来说太大了,是真的吗?regex有大小限制吗,还是我搞砸了?
乌利希期刊指南:
我还发现了最大尺寸。如果它是字符[106-12131],它会找到substring,但如果我在substring的任何位置添加任何一个字符,它就找不到它。所以,它是122025。
你可能不应该在这里使用正则表达式。
我将向你展示Spirit如何有效地做到这一点,但你没有展示相关代码,所以我将等待。
也就是说,至少使组非捕获组(例如这里的((.*?r*n*)*)
),并考虑使用cmatch
而不是smatch
(docs)
哦,这可能是灾难性回溯的情况[¹]:
((.*?r*n*)*)
试试这样写:
(.+?[rn]+)*
让它也不捕获:
(?:.+?[rn]+)*
相关文章:
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 在VC2015U3上,std::regex比boost::regex慢得多
- 使用 boost::regex (c++) 比较两个正则表达式
- Build Boost Regex for Windows VS2013
- boost::regex 和std::regex之间的不一致?
- 尝试使用生成文件编译程序时"fatal error: boost/regex.hpp: No such file or directory" C++
- 带有Boost Regex库的未解决的外部对象
- boost::regex链接问题在Xcode 4.5.2中
- 如何检查使用哪个匹配组进行匹配(boost-regex)
- boost::regex和std::regex之间的不一致
- Boost.Regex parsing
- BOOST.REGEX定界器解析
- 以下等级表达式不适合Boost Regex
- 在Windows C 代码:: Blocks上的Boost Regex
- Boost Regex用于格式化MAC地址字符串
- 使用 c++/boost::regex 提取 HTML 文件的特定部分
- 使用 boost::regex 更改文件中数据的格式
- 在OS X上使用clang编译boost regex时发生链接错误
- boost regex空格后跟一个或多个星号
- Boost Regex中的命名子表达式错误