日期:2014-05-16  浏览次数:20942 次

Shell正则表达式如何保证括号成对出现?
我遇到这样一个问题:要匹配7个数组,前3个数字可以用括号括起来,也可以不用。
比如:
1234567            可以
(123)4567        可以
但是括号不成对就不行。比如:
(1234567  和   123)4567    就不可以。

我写了这样一个正则表达式: /^\(?[0-9]{3}\)?[0-9]{4}/
这个表达式没办法保证括号是成对的。该如何解决这个问题呢?怎么写才能将两个括号关联起来,让它们成对出现呢?
正则表达式 shell 括号成对出现

------解决方案--------------------
只两种情况,使用或 '
------解决方案--------------------
' 表达式..     这里用的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})'