苹果 awk 正则表达式(蒙特雷)和等价类的错误

问题描述 投票:0回答:1

我偶然发现了 Apple 的 awk 关于等价类的奇怪行为,所以我试图了解正则表达式解析器的细节:

绳子 正则表达式
gsub(regexp, "_", string); print string
anything
[[=a]
awk:非终止字符类
][=ab
[[=a]]
_[=ab
anything
[[=a=]
awk:非终止字符类
][=ab
[[=a=]]
][=_b
][=ab
[[=ab]
][=a_
][=ab
[[=ab=]
][_a_
][=ab
[[=ab=]]
][=ab
][=ab(
[[=ab(=]
][_a__
][=ab(
[[=ab=](]
awk:语法错误

是否可以伪造一个多平台测试(BSD、Apple、GNU、POSIX)来确定正则表达式引擎的行为,而不导致

awk
崩溃


旁白: 用于测试的示例代码(第一行):

awk 'BEGIN{
    string="anything"; regexp="[[=a]";
    gsub(regexp, "_", string); print string
}'
regex macos awk
1个回答
0
投票

我发现了一些能够查明损坏的实现的东西:

# GNU awk
awk 'BEGIN { print match("\t", /[[=\t=]]/) }'
1

# Solaris (POSIX)
awk 'BEGIN { print match("\t", /[[=\t=]]/) }'
1

# macOS
awk 'BEGIN { print match("\t", /[[=\t=]]/) }'
0

# FreeBSD
awk 'BEGIN { print match("\t", /[[=\t=]]/) }'
0
© www.soinside.com 2019 - 2024. All rights reserved.