簡體   English   中英

正則表達式末尾不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM