我偶然发现了 Apple 的 awk 关于等价类的奇怪行为,所以我试图了解正则表达式解析器的细节:
绳子 | 正则表达式 |
|
---|---|---|
|
|
awk:非终止字符类 |
|
|
|
|
|
awk:非终止字符类 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
awk:语法错误 |
是否可以伪造一个多平台测试(BSD、Apple、GNU、POSIX)来确定正则表达式引擎的行为,而不导致
awk
崩溃?
旁白: 用于测试的示例代码(第一行):
awk 'BEGIN{
string="anything"; regexp="[[=a]";
gsub(regexp, "_", string); print string
}'
我发现了一些能够查明损坏的实现的东西:
# 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