2012-11-02 92 views
1

我試圖做一個正則表達式查找具有特定類的元素相匹配的CSS類名。正則表達式來當多個用

例如

<span class = "float"> 

對於我想出了這一點:

\s*class\s*=\s*('|")\s*float\s*('|")\s* 

但那麼你當然可以有多個CSS聲明

<span class = "float align cssnames"> 

我不知道怎麼樣你會讓所有的東西都可選。

回答

2

也許\s*class\s*=\s*('|")[\w\s]*\bfloat\b[\w\s]*('|")\s*

在它看起來float每側上一個字邊界引號之間,可能是通過進一步字字符和/或空間(即其它的CSS類)包圍。

+0

這似乎是我需要工作。 – Adam

0

Regex rgx = new Regex("\"float.*\"");

將匹配「這裏漂浮什麼,但與關閉的引號結束」

0

該代碼會尋找類=「和」作爲非匹配的錨。然後,它會採取每一個找到的屬性值,並把他們每個人到名爲Assignements名爲捕獲組。

然後linq會提取出那些名爲capture(s)的人,然後從捕獲的組中查找單個「Float」項並返回true或false。

string data = @"<span class = ""float align cssnames"">"; 

string pattern = @"(?:class\s*=\s*\x22)((?<Assignments>[^\s\x22]+)(?:\s?))+(?:\x22)"; 

var containsFloat = 
    Regex.Matches(data, pattern, RegexOptions.Multiline) 
     .OfType<Match>() 
     .Select(mt => mt.Groups["Assignments"].Captures 
              .OfType<Capture>() 
              .Select(c => c.Value)) 
     .SelectMany(assignments => assignments) // is an IEnumerable<string> = { "float", "align", "cssnames" } at this point 
     .Any(assignment => assignment == "float"); // True!