gpt4 book ai didi

ruby-on-rails - ruby 64 位 aix 编译中的正则表达式限制

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:06 24 4
gpt4 key购买 nike

我在 AIX Box 上编译了 64 位 ruby​​。似乎没有任何问题,除非我在代码中使用了一些特定的正则表达式。这是一个例子:

/([0-9]){1000}/.match("2")

结果:

RegexpError: too big quantifier in {,}: /([0-9]*){1000}/

当我尝试减少重复次数时,它似乎奏效了。

我尝试深入研究 ruby​​ 代码。但无法理解原因。这是我们在 AIX/64 位 ruby​​ 中的某种依赖或限制吗?

提前致谢:)

最佳答案

我几乎立即找到了答案。

我做的第一件事是在 ruby​​ 源代码中搜索抛出的错误。我发现 regex.h 对此负责。

在regex.h中,代码流是这样的:

/* Maximum number of duplicates an interval can allow.  */
#ifndef RE_DUP_MAX
#define RE_DUP_MAX ((1 << 15) - 1)
#endif

现在这里的问题是 RE_DUP_MAX。在 AIX 机器上,相同的常量已在/usr/include 中的某处定义。我搜索了一下,发现在

/usr/include/NLregexp.h
/usr/include/sys/limits.h
/usr/include/unistd.h

我不确定正在使用这三个中的哪一个(很可能是 NLregexp.h)。在这些 header 中,RE_DUP_MAX 的值已设置为 255!所以正则表达式的重复次数是有上限的!

简而言之,原因是编译采用了系统定义的值而不是我们在regex.h中定义的值!

因此,通过在 regex.h 中重新分配 RE_DUP_MAX 的值解决了这个问题即

# ifdef RE_DUP_MAX
# undef RE_DUP_MAX
# endif

# define RE_DUP_MAX ((1 << 15) - 1)

干杯!

关于ruby-on-rails - ruby 64 位 aix 编译中的正则表达式限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8924762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com