Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regexp模式可选字符_Regex - Fatal编程技术网

Regexp模式可选字符

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

我想匹配类似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}