正则表达式模式可选字符

时间:2010-08-20 07:23:39

标签: regex

我想匹配一个字符串,如19740103-0379或197401030379,即短划线是可选的。 如何使用regexp完成此操作?

2 个答案:

答案 0 :(得分:8)

通常你可以使用-?。或者,您可以使用-{0,1},但您应该会发现{0}支持“零或一次出现”几乎无处不在。

?

如果你想在任何地方接受带有任意数量破折号的12位数字,你可能需要做类似的事情:

pax> echo 19740103-0379 | egrep '19740103\-?0379'
19740103-0379

pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379

基本上是零或更多的破折号,然后是12次出现(一个数字后面跟着零或更多破折号)并且会捕捉各种奇妙的东西,如:

-*([0-9]-*){12}

(当然,如果你的正则表达式引擎支持--3-53453---34-4534--- ,你应该使用\d代替[0-9]

答案 1 :(得分:1)

你可以试试不同的:

\d*匹配仅由数字组成的字符串

\d*-\d*匹配一串格式数字 - 破折号 - 数字

[0-9\-]*匹配仅由短划线和数字组成的字符串

您可以通过|(或)组合它们,以便您拥有(\d*)|(\d*-\d*):匹配格式只是数字和数字 - 破折号数字。