[英]Regex with not match at end
我正在嘗試編寫一個正則表達式來匹配這樣的模式:
<td style="alskdjf" />
即自終止<td>
但不是這個:
<td style=alsdkjf"><br /></td>
我最初想出了:
<td\s+.*?/>
但這顯然在第二個示例中失敗了,我認為這樣的方法可能會起作用:
<td\s+.*?[^>]/>
但事實並非如此。 我正在使用C#.NET。
僅查找具有屬性的<td>
。 例如,尋找<td style="alsdfkj" />
而不是<td>
。
由於HTML不是常規的,因此將正則表達式與HTML結合使用將會遇到問題。 除了最簡單的情況,我建議對所有其他情況都使用HTML解析器。
這將與您要查找的內容相匹配,而與您最初嘗試幾次時遇到的有問題的案例不匹配:
<td[^>]*?/>
但是請注意,如果需要在屬性值中允許>
字符,則需要如下所示:
<td(?:[^>]|"[^"]*?")*?/>
它允許>
僅在匹配的雙引號(你可以同樣展開它允許單引號)。
您可以將要查找的任何特定屬性添加到正則表達式中。 例如您的示例:
<td[^>]*? style="alskdjf"[^>]*?/>
正則表達式在解釋凌亂的HTML時會遇到嚴重的麻煩,這是瀏覽器通常必須處理的問題。 對於您不想考慮的標記,可以進行各種各樣的令人困惑的混淆!
HTML Agility Pack是您真正想要使用的,並且在我見過的所有地方都有很好的評價。 它是一個健壯的庫,用於將任何類型的損壞的HTML讀取到DOM模型中。 我個人發現它是一個極好的庫,當然還有其他庫,其中許多庫是在業務應用程序上下文中使用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.