ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ripgrep 报 Compiled regex exceeds size limit of 10485760 bytes 时如何调大正则大小限制

ripgrep 报 Compiled regex exceeds size limit of 10485760 bytes 时如何调大正则大小限制 ripgrep 报 Compiled regex exceeds size limit of 10485760 bytes 时如何调大正则大小限制【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep使用 ripgrep 时如果传入的正则特别大或者传入了大量较小的模式模式在编译阶段可能触达一个预置的大小上限搜索直接失败并报出如下错误FAQ 中的示例$ rg \pL{1000} Compiled regex exceeds size limit of 10485760 bytes.这里的数字 10485760约 10 MB是编译后正则允许占用的内存上限。rg \pL{1000}这样的模式看起来不长但\pL是包含所有 Unicode 字母的字符类本身就很庞大再重复 1000 次编译后的对象就超出了默认限额。解决办法是显式调大这个限制而不是改写模式本身。确认触发原因模式超出编译限额而非语法错误报错信息里的 “Compiled regex exceeds size limit of 10485760 bytes” 只在一个条件下出现模式语法本身没有问题但编译产物超过了regex-size-limit的当前值。这个信息格式来自 ripgrep 的正则错误处理代码error.rs当底层编译错误携带 size limit 时才拼出这条消息。判断是否属于本场景同一模式不加任何限制参数时稳定报Compiled regex exceeds size limit of ...换回普通小模式例如普通单词、[0-9]\w之外的简单模式则能正常搜索。如果你的报错是syntax error一类的提示那属于模式语法问题调大限额不会有帮助。用 --regex-size-limit 调大限额在命令上追加--regex-size-limit把允许用于构造正则匹配器的内存上限调大即可FAQ 给出的操作路径$ rg \pL{1000} --regex-size-limit 1G参数取值规则见 flags 定义 中的文档说明接受K、M、G后缀分别表示 kilobytes、megabytes、gigabytes不带后缀时按字节bytes解释写法支持--regex-size-limit 1G和--regex-size-limit1G两种形式。两点来自文档的说明需要记住调大到 1GB 并不意味着 ripgrep 一定会用掉那么多内存。这个限额只是“允许”构造正则时大约占用那么多内存实际用量由模式本身决定这个参数本身是让用户主动允许 ripgrep 花更多时间和/或内存来构建匹配器的开关所以按需设置不要无脑顶到最大。--regex-size-limit标志自 0.5.2 版本引入见 CHANGELOG如果你手头的 ripgrep 比这更老需要先升级版本才能使用。验证是否生效判断依据仍然是报错是否消失加上参数后之前报Compiled regex exceeds size limit of 10485760 bytes的命令应当能进入正常搜索并输出匹配结果而不再在编译阶段失败。如果调大后仍然报错说明编译产物还是超了新限额继续按同样方式加大数值即可如果报错变成了语法错误等其他文本则问题不在大小限制上。一个边界PCRE2 模式不适用此参数测试代码中有一条明确注释--regex-size-limitdoesnt apply to PCRE2见 feature.rs。也就是说如果你用--pcre2启用 PCRE2 正则引擎调大--regex-size-limit不会改变其编译行为遇到限额类错误时需要另行处理。默认的 Rust 正则引擎下本文路径有效。参考场景与命令示例FAQ.md“How do I get around the regex size limit?” 一节参数取值格式与说明crates/core/flags/defs.rs错误信息来源crates/regex/src/error.rs版本引入记录CHANGELOG.md0.5.2 条目【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表