2013-02-20 41 views
2

我有以下字符串正則表達式來選擇2個字符串之間的文本?

Month: March 2011 
Month: January 2012 
Month: December 2011 

,我想寫它可以選擇每月的名稱(如「三八」),僅在2011年這是一個正則表達式的意思是選擇的路線「之間的一切月份「和」2011年「。 我做的正則表達式是

^(Month:)[A-Za-z0-9]+(2011)$ 

但它似乎沒有工作。怎麼了??? 結果應該是「三月」和「十二月」。 謝謝!

回答

1

使用前瞻:

/[a-z]+(?= 2011)/ig 

在這裏看到它在行動:http://regex101.com/r/fE9lR9

這裏是一個JavaScript演示:http://jsfiddle.net/rZJur/

+0

它的作品不錯,但它是一個有點難受(爲正則表達式一個真正的新手),以瞭解它是如何工作的。它將「2011年」背後的一切都考慮在內,但它如何排除「月份」? – Nicolaesse 2013-02-20 20:36:53

+1

@Nicolaesse'[a-z]'只匹配字符,所以冒號和月份名稱之間的空格就是屏障。 – 2013-02-20 20:38:40

1

它不匹配,因爲你不佔白在月份和年份之間的空間。

^(?:Month:)([A-Za-z]+)(?: 2011)$ 

或者你可以使用前瞻/回顧後組合:

你可以佔空間後捕獲月組

(?<=^Month:)[A-Za-z]+(?= 2011$) 
+0

對不起隊友,但第一個和第二個正則表達式都不適合我,請嘗試以下鏈接http://regex101.com/r/jV2qU8 – Nicolaesse 2013-02-20 20:33:41

+0

你是對的,第二個不起作用,我修正了它。但第一個工作正常,你只需要從這個分組中得出結果。 – Michael 2013-02-20 20:40:56

1

這種表達的作品(向後看/向前看)(?<=Month\:\s)(.+?)(?=\s2011)

編輯: 只需非捕獲組,這個工作:(?:Month\:\s)(.+?)(?:\s2011)

相關問題