有时存在正则表达式捕获组

时间:2012-09-16 17:02:29

标签: regex grouping

我一直在撞墙挡住了好几个小时试图解决这个问题。我正在尝试捕获三个组如果他们在那里,如果没有,捕获第一组中的所有内容。我可以将它分解为单独的正则表达式语句,但保留一个会很棒。

4个不同的字符串如下所示:

Be somewhere now & be there later (Store) @1300
Be at work! @1430
Go home whenever (Home)
Don't ever go to the donut shop.

我正在寻找的最终结果如下:

(Group 1) Be somewhere now & be there later (Group 2) Store (Group 3) @1300
(Group 1) Be at work! (Group 2) (Group 3) @1430
(Group 1) Go home whenever (Group 2) Home (Group 3)
(Group 1) Don't ever go to the donut shop. (Group 2) (Group 3)

到目前为止,我能做的最好的事情是处理第一和第二选项,只抓住第3组。我已经这样做了:

.*(?:\(.*\))?\s(\@\d+)$

我非常确定.*必须删除,因为如果我将其转换为(.*),它始终会匹配所有内容。

我已经尝试了我所知道的每一种方式,但无法让它工作,所以现在我联系你。 : - )

1 个答案:

答案 0 :(得分:1)

试试这个:

^(.*?)(?:\(([^)]+)\))?(?:\s+@(\d+))?$

关键是.*?是非贪婪的匹配。它将尽可能少地匹配,因此它将不匹配整个字符串,除非其他组无法匹配。

查看在线工作:rubular