【问题标题】:erlang regular expression is too largeerlang正则表达式太大
【发布时间】:2014-07-30 06:49:28
【问题描述】:

在 erlang 中使用大型正则表达式时,我得到了 error:{badmatch,{error,{"regular expression is too large",29899}}}。这是连接表达式,但我真的需要它,因为它比迭代抛出几个正则表达式更有效。

我在“大小和其他限制”部分中读到http://www.pcre.org/pcre.txt,PCRE 可以用更大的链接大小进行编译,以处理真正巨大的正则表达式。

有没有办法用 erlang 做到这一点?

我已经从 homebrew 安装了最新的稳定版本 17.1。

【问题讨论】:

  • 你是如何得到这个错误信息的?我已经过滤了源代码,找不到可以发出此消息的模块。
  • [H | T] = [ "\d+ abc" || _ <- lists:seq(1,10000)]. SuperRegexp = lists:foldl(fun(R, SR) -> SR ++ "|" ++ R end, H, T). re:compile(SuperRegexp). {error,{"regular expression is too large",69999}}
  • 好的,re:compile/1 是梁库的一部分,而不是 re 模块(我不知道存在)并且检查似乎是在这个库中完成的 - 至少消息在库文件中。没有flag可以修改你启动erl的limit wen,所以恐怕没有简单的方法让它起作用。
  • 我发现 re2 库 (github.com/tuncer/re2) 没有这么严格的限制。它还有 max_mem 选项,允许使用非常庞大的正则表达式。所以,我的问题解决了。谢谢
  • 很高兴知道,如果其他人尝试解决相同的问题,您应该将其作为答案并将其标记为已解决。

标签: regex erlang pcre


【解决方案1】:

RE2 库 (github.com/tuncer/re2) 没有这么严格的限制。它还有 max_mem 选项,允许使用非常庞大的正则表达式

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多