2011-06-21 27 views
2

我試圖找到一個CSS的URL使用正則表達式,但沒有經驗與它,我迷路了。我需要幫助我的正則表達式在C#

研究之後,我做了這一點:

^(href)([\S]*(\.css))(\")$ 

,但它僅與

href="/media/system/css/modal.css" 

工作,我必須要找到它:

<link rel="stylesheet" href="/media/system/css/modal.css" type="text/css" /> 

<link rel="stylesheet" href="http://www.campingbellavista.ch/compon [...] k2/css/k2.css" type="text/css" /> 
+3

如果您指定^和$,則表示該模式必須從該行的開頭開始,並在該行的結尾處結束。嘗試從您的正則表達式中刪除^和$。並考慮檢查這個問題的答覆:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags。法文不應該影響正則表達式的工作方式;) –

回答

0

這個怎麼樣:HREF = 「([^」] * )」

+0

This works also ^^ – Yvalf

0

試試這個:

href="([^"]*?\.css)" 
2

考慮使用解析器像HTML Agility Pack和一些XPath的:

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc = web.Load("http://stackoverflow.com/questions/6422517"); 
var links = doc.DocumentNode.SelectNodes("//link[@rel='stylesheet']"); 
foreach (var node in links) 
{ 
    Console.WriteLine(node.Attributes["href"].Value); 
} 

或者,選擇具有href所有元素,與.css結束:

var links = doc.DocumentNode.DescendantNodesAndSelf() 
       .Where(node => node.Attributes.Contains("href") && 
           node.Attributes["href"].Value.EndsWith(".css")); 
+0

無法讓第二個xpath在HAP上工作,說實話。應該是'// link [ends-with(@ href,'css')]''。 – Kobi

1

你的模式

^(href)([\S]*(\.css))(\")$ 

^手段字符串的開始==>不是真正符合你的第二個例子

$表示匹配字符串的末尾==>在第二個示例中不正確

您可以從模式中刪除thos錨,它應該與第二個示例匹配。

在表達式中有很多不必要的括號。這是做同樣的

href\S*\.css\" 

()括號的含義,他們組的內容,並把匹配的模式爲捕獲組。我假設你不想要這個,至少不是你用它們的方式。

可能是你想要的東西,這樣的

href=\"(\S*\.css)\" 

這樣的超級鏈接是捕獲組1

[]創建一個字符類,但如果你把只有一個項目到它那不是需要。所以[\S]\S相同。

但最後我會建議你仔細看看Kobi的答案。

0

嘗試:

Regex expression = new Regex("<.*href=\"(?<CSSUrl>.*css)\".*", RegexOptions.None); 

有了,你可以得到組名爲 「CSSUrl」 的URL。