gpt4 book ai didi

awk - 多行格式化正则表达式常量以提高可读性

转载 作者:行者123 更新时间:2023-12-04 14:21:41 25 4
gpt4 key购买 nike

出于学习目的,我正在为电话号码实现一个小的正则表达式匹配器。我的目标是可读性,而不是最短的 gawk 程序:

# should match
#1234567890
#123-456-7890
#123.456.7890
#(123)456-7890
#(123) 456-7890

BEGIN{
regexp="[0-9]{10},[0-9]{3}[-.][0-9]{3}[.-][0-9]{4},\\([0-9]{3}\\) ?[0-9]{3}-[0-9]{4}"
len=split(regexp,regs,/,/)
}
{for (i=1;i<=len;i++)
if ($0 ~ regs[i]) print $0
}

为了更好的可读性,我想将 regexp="... 行拆分为几行,例如:

regexp="[0-9]{10}
,[0-9]{3}[-.][0-9]{3}[.-][0-9]{4}
,\\([0-9]{3}\\) ?[0-9]{3}-[0-9]{4}"

在 awk 中有没有简单的方法来做到这一点?

最佳答案

BEGIN {
regs[1] = "[0-9]{10}"
regs[2] = "[0-9]{3}[-.][0-9]{3}[.-][0-9]{4}"
regs[3] = "\\([0-9]{3}\\) ?[0-9]{3}-[0-9]{4}"
c = 3
}
{
for (i = 1; i <= c; i++)
if ($0 ~ regs[i])
print $0
}

如果您的 awk 实现支持长度(数组) - 使用它(请参阅下面的 Jaypal Singh 评论):

BEGIN {
regs[1] = "[0-9]{10}"
regs[2] = "[0-9]{3}[-.][0-9]{3}[.-][0-9]{4}"
regs[3] = "\\([0-9]{3}\\) ?[0-9]{3}-[0-9]{4}"
}
{
for (i = 1; i <= length(regs); i++)
if ($0 ~ regs[i])
print $0
}

还要考虑计算(动态)正则表达式的副作用,见GNU awk manual了解更多信息。

关于awk - 多行格式化正则表达式常量以提高可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582165/

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