2014-11-04 115 views
-2

我有一個正則表達式來捕獲字符串的html標籤。它工作得很好,但我發現它不起作用的情況。正則表達式不能捕獲html標籤

當我有一個標籤後跟屬性「data-xxxx-xxxx」時,該標籤被忽略。如果我將相同的屬性移動到最後位置,它就會起作用。如果我從單詞中刪除「 - 」,它就會起作用。

我的正則表達式缺少一些東西,但我無法找到解決方案來解決它。

這裏是工作的例子:

<td>Go? <a href="$VAR" target="_blank" data-link-category="cat" 
      data-link-name="bla">Click</a></td> 

<td>Go? <a datalinkcategory="cat" href="$VAR" target="_blank" 
      data-link-name="bla">Click</a></td> 

一個例子,並非作品:

<td>Go? <a data-link-category="cat" href="$VAR" target="_blank" 
      data-link-name="bla">Click</a></td> 

我的正則表達式:

Regex htmlRegex = new Regex(
    @"(<!--)|(-->)|(<\s?/?\w+((\s+\w+(\s*=\s*(?:""(.|\s)*?""|'(.|\s)*?'|[^'"">\s]+))?)+\s*|\s*)/?>)"); 

我怎樣才能改變正則表達式匹配在語句開頭包含屬性(如「data-xxxx-xxxx」)的標籤?

提前致謝。

+2

你有沒有考慮過使用像HtmlAgilityPack這樣的專用html解析器? – CodeCaster 2014-11-04 11:04:15

+3

[不要用正則表達式解析HTML](http://stackoverflow.com/a/1732454/418066) – Biffen 2014-11-04 11:05:14

+0

我知道,但這個應用程序是遺留的,我只需要修復這個正則表達式。我沒有時間去改變實施。 – placplacboom 2014-11-04 11:08:20

回答

1

雖然我同意,這不是一個好主意來解析與正則表達式的HTML,在這種情況下,你可以通過對單詞字符部分匹配在初始屬性檢查添加的連字符的字符組解決您的正則表達式:

(<!--)|(-->)|(<\s?\/?\w+((\s+[\w-]+(\s*=\s*(?:"(.|\s)*?"|'(.|\s)*?'|[^'"">\s]+))?)+\s*|\s*)\/?>) 
          ^^^^^ 
    change is here, now matches against word characters or hypens 

Working test here它匹配所有3個示例標籤。

但請注意,它可能仍然匹配(或不匹配)它不應該(或應該)的各種事情。

+0

我知道,哥們!我同意你們所有人,但這個應用程序是一團糟。我們只使用這個正則表達式來查找html代碼上的錨點和圖像。我們將整個系統遷移到新架構並修正這一點。現在,我不想花時間去完成將被完全取代的東西。感謝您的幫助 :) – placplacboom 2014-11-04 11:25:10