Bash Shell匹配SSN的正则表达式

你需要一个能够匹配社会保险号(social security number,SSN)的正则表达式

解决方案

美国的社会保险号由 9 位数字组成,通常划分为 3 部分:先是 3 位数字,然后是 2 位数字,最后是 4 位数字(如 123-45-6789)。有时候也可以不使用连字符,因此要在正则表达式中令连字符成为可选字符。

grep '[0-9]\{3\}-\{0,1\}[0-9]\{2\}-\{0,1\}[0-9]\{4\}' datafile

讨论

这种正则表达式经常被戏称为只写表达式,意思是很难或压根无法阅读。这里我们将其一一分解来帮助你理解。一般而言,只要是涉及正则表达式的 bash 脚本,一定要在正则表达式附近加上注释,解释清楚要匹配的内容。

在正则表达式中加入一些额外的空格能够改善可读性,让视觉效果更加轻松,但这同时也会改变正则表达式的含义,变成了需要在这些位置上匹配空格字符。暂时忽略这一点,先在其中插入一些空格,方便阅读。

[0-9]\{3\} -\{0,1\} [0-9]\{2\} -\{0,1\} [0-9]\{4\}

第一部分匹配 3 个任意数字。第二部分匹配 0 次或 1 次连字符。第三部分匹配 2 个任意数字。第四部分匹配 0 次或 1 次连字符。最后一部分匹配 4 个任意数字。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!