2014-09-01 119 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

相關問題