是boost:regex块大小限制

Is boost:regex block size limited?

本文关键字:boost regex      更新时间:2023-10-16

我有相当大的文本文件解析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]+)*