当前位置: 技术问答>linux和unix
Shell正则表达式如何保证括号成对出现?
来源: 互联网 发布时间:2017-03-31
本文导语: 我遇到这样一个问题:要匹配7个数组,前3个数字可以用括号括起来,也可以不用。 比如: 1234567 可以 (123)4567 可以 但是括号不成对就不行。比如: (1234567 和 123)4567 就不...
我遇到这样一个问题:要匹配7个数组,前3个数字可以用括号括起来,也可以不用。
比如:
1234567 可以
(123)4567 可以
但是括号不成对就不行。比如:
(1234567 和 123)4567 就不可以。
我写了这样一个正则表达式: /^(?[0-9]{3})?[0-9]{4}/
这个表达式没办法保证括号是成对的。该如何解决这个问题呢?怎么写才能将两个括号关联起来,让它们成对出现呢?
比如:
1234567 可以
(123)4567 可以
但是括号不成对就不行。比如:
(1234567 和 123)4567 就不可以。
我写了这样一个正则表达式: /^(?[0-9]{3})?[0-9]{4}/
这个表达式没办法保证括号是成对的。该如何解决这个问题呢?怎么写才能将两个括号关联起来,让它们成对出现呢?
|
只两种情况,使用或 '|' 表达式.. 这里用的egrep与grep -E等价
例子:
egrep '(^([0-9]{3})[0-9]{4})|(^[0-9]{7})'
例子:
echo '(123)4567' | egrep '(^([0-9]{3})[0-9]{4})|(^[0-9]{7})'
echo '1234567' | egrep '(^([0-9]{3})[0-9]{4})|(^[0-9]{7})'
echo '(1234567' | egrep '(^([0-9]{3})[0-9]{4})|(^[0-9]{7})'
echo '123)4567' | egrep '(^([0-9]{3})[0-9]{4})|(^[0-9]{7})'