以下正则表达式有什么问题

时间:2016-09-21 10:25:34

标签: regex unix

unix中的regex有什么问题?

echo AB345678  | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p'
echo 12345678  | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p'

我没有得到输出:(

我的意思是我回应的字符串为什么它与我的正则表达式不匹配? 我的正则表达式怎么了?

2 个答案:

答案 0 :(得分:2)

BRE正则表达式语法中的交替运算符必须定义为转义管\|(类似于()):

echo "AB345678"  | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}\|[0-9]\{8\}\)$/p'
                                                      ^^

查看online demo

答案 1 :(得分:0)

在更复杂的表达式中,您可以将' -r' 添加到sed选项,而不是转义敏感字符。

从sed手册:

  

-r, - regexp-extended
        在脚本中使用扩展的正则表达式。

答案:

echo AB345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p'
                      ^
echo 12345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p'
                      ^
相关问题