2011-09-29 69 views
0

我遇到了在C#中設計正則表達式的問題。我必須解析嵌入了多個URL文本文檔,我不得不提取那些在C中設計正則表達式#

...url=http://www.cnn.com?id=abc,def&system=2&mode=2&quality=ade,url=http://www.bbc.com... 

(^其實我已經加省略號表明的內容其本身而言,...不會在文本)

開始時部分很簡單,因爲我可以用正則表達式開始「URL =」,但是,我不能想出結束比賽

RegEx = (?<IgnoreFirst>[,]url=)(?<Url>[^,]+) 

此正則表達式停止的方式在第一個逗號 - 所以就在'ABC'後,並沒有返回整個網址

RegEx = (?<IgnoreFirst>[,]url=)(?<Url>[^,]+)(?<IgnoreSecond>url) 

這不起作用,因爲匹配在第一個逗號停止,然後查找找不到的'url'。從我做的一些閱讀看來,它似乎是一個回溯等問題,所以如果任何人都可以用正確的正則表達式來幫助我,那會很棒!

PS。雖然我們在這,但如果我想在質量之前提取網址,我該怎麼做?

+1

作爲一個側面說明,請下載Expresso(免費應用程序)。它允許您以交互方式構建和測試.Net RegEx(而不是JScript RegEx)。 –

+0

+1 Expresso。它的皮條客。 –

回答

2

如何使用這樣的事情:

RegEx = url=(?<Url>.+?)(?=,url|$) 

先行在年底將迫使匹配停在其後一屆",url"或字符串或行的末尾。

+0

。+? - 什麼?在這做? – tunafish24

+0

它使'+'運算符非貪婪,以便在第一次出現',url'時停止匹配。否則,它將匹配到字符串的結尾。 –