Regexp模式可选字符
我想匹配类似19740103-0379或197401030379的字符串,即破折号是可选的。Regexp模式可选字符,regex,Regex,我想匹配类似19740103-0379或197401030379的字符串,即破折号是可选的。 如何使用regexp实现这一点?通常您可以使用-?。或者,您可以使用-{0,1},但是您应该发现,?对于“零次或一次”的支持几乎无处不在 pax> echo 19740103-0379 | egrep '19740103\-?0379' 19740103-0379 pax> echo 197401030379 | egrep '19740103\-?0379' 197401030379
如何使用regexp实现这一点?通常您可以使用
-?
。或者,您可以使用-{0,1}
,但是您应该发现,?
对于“零次或一次”的支持几乎无处不在
pax> echo 19740103-0379 | egrep '19740103\-?0379'
19740103-0379
pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379
如果您想在任何位置接受12位数字和任意数量的破折号,您可能需要执行以下操作:
-*([0-9]-*){12}
基本上是零个或多个破折号,后跟12次(一个数字后跟零个或多个破折号),并将捕获各种奇妙的东西,如:
--3-53453---34-4534---
(当然,如果您的正则表达式引擎支持,您应该使用
\d
而不是[0-9]
。您可以尝试不同的方法:
\d*
匹配仅由数字组成的字符串
\d*-\d*
匹配一组格式数字-破折号-数字
[0-9\-]*
匹配仅由破折号和数字组成的字符串
您可以通过
|
(或)组合它们,例如(\d*)|(\d*-\d*)
:只匹配数字和数字破折号格式。您只需要在字符类([…])中转义-
。破折号在正则表达式的其他地方没有特殊意义。请指定您正在使用的语言和/或正则表达式库。您可以使用[0-9]{8}-?[0-9]{4}