Regexp模式可选字符

use*_*985 7 regex

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

pax*_*blo 8

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

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

pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379
Run Code Online (Sandbox Code Playgroud)

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

-*([0-9]-*){12}
Run Code Online (Sandbox Code Playgroud)

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

--3-53453---34-4534---
Run Code Online (Sandbox Code Playgroud)

(当然,你应该使用\d而不是[0-9]你的正则表达式引擎是否支持).

  • 你只需要在一个字符类(`[...]`)中转义`-`.破折号在正则表达式的其他地方没有特殊含义. (2认同)