可选的正则表达式复杂化

时间:2013-10-17 22:01:15

标签: regex perl

我有这个输入:

stuff (2+13:02)
more stuff (20:32)
more more stuff (8+23:00)

2+是可选的,代表一个完全不同的值,所以我写了这个正则表达式:

  

/((?:(\ d)+)(\ d +:?\ d +))/ G

$1应始终为+之前的数字,并将其余数字和:中的$2分组,但并非总是如此。在(20:32)的示例中,$1将为2$2将为0:32。如何制作$1 undef$2 = 20:32

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

尝试将?移动到您想要选择的组之后。如果您想要匹配文字+

,通常也需要转义+
/(?:(\d)\+)?(\d+:\d+)/g

这将匹配:

  • 可选的未捕获组:
    • 在第1组中捕获的单个数字
    • 文字+
  • 一个或多个数字,后跟一个:,后跟一个或多个数字,在第2组中捕获