2014-09-01 121 views
3

我一直在谷歌搜索和通过堆栈溢出提供的推荐问题。但是,我没有找到答案。正则表达式只捕获第一场比赛

我想用正则表达式来分析字符串,例如字符串的是

Lot: He said: Thou shalt not pass!

我想捕捉Lot为一组,和He said: Thou shalt not pass!。然而,当我用我的(.+): (.+)模式,则返回

Lot: He said:Thou shalt not pass!

是否有可能使用正则表达式来捕获He said: Thou shalt not pass

+0

你想捕捉的第二部分没有'!'? – 2014-09-01 09:44:28

回答

12

第一组需要非贪心(或懒惰)基数:(.+?): (.+)

有关http://www.regular-expressions.info/repeat.html的详细信息,请参阅“懒惰而不是贪婪”一章。

+0

工程就像一个魅力,@ sp00m对不起,因为我缺乏代表不能够upvote。 – 2014-09-01 11:53:21

3

试试这个:

([^:]+):\s*(.*) 
+0

+1使用负面字符类而不是'.' – funkwurm 2014-09-01 09:38:49

+0

@funkwurm负面字符类被认为比非贪婪匹配更快。 – Kent 2014-09-01 09:43:05

+0

这一个也适用,但我已经使用sp00m的答案。 – 2014-09-01 11:54:06

1

以下工作。

([^:]+): (.+)

+0

你能否详细解释一下? – 2014-09-01 10:08:54

+0

请看下面的链接解释[链接](http://regex101.com/r/jE3jU8/1) – Venky 2014-09-01 10:58:45

+0

我现在明白了。谢谢。 – 2014-09-01 11:55:36

1

您应该使用标志IG - I =不区分大小写,G =第一场比赛和喜欢的表达后不返回 “(:)(:*)。?。”。

你可以看到这里的例子 https://regex101.com/r/SXjg1b/1

相关问题