我有在一個ASP.Net應用以下VB.Net 2.0:淨正則表達式匹配的分組和重複問題
output = Regex.Replace(output, "<p>(?:(?:\<\!\-\-.*?\-\-\>)|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|[\s\u00A0]+)*</p>", String.Empty, RegexOptions.Compiled Or RegexOptions.CultureInvariant Or RegexOptions.IgnoreCase Or RegexOptions.Singleline)
實施例的東西它匹配良好:
<p></p>
<p> </p>
<p><br/><br/></p>
<p><!-- comment --><!-- comment --></p>
<p> </p>
<p><br/> </p>
<p><!-- comment --><br/><!-- comment --></p>
的東西
<p> <br/></p>
例子我想匹配,但它並不:
<p > <!--[if !supportLineBreakNewLine]--><br /> <!--[endif]--></p>
我如何讓羣組和重複功能按照我的要求工作?
編輯:哎呀,忘了評論組。 編輯#2:哎呀,忘了失敗。 編輯#3:固定的例子。 編輯#4:更新的正則表達式基於答案
結論:
這裏是我的全部三個答案基準結果。由於三個匹配現在的一切,我跑了每一個通過10,000次重複文本塊:
Mine:
<p\s*>(?:(?:<!--.*?-->)|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|[\s\u00A0]+)*</p>
6.312
Gumbo:
<p\s*>(?:[\s\u00A0]+|&(?:nbsp|\#0*160|x0*A0);|<br\s*/?>|<!--(?:[^-]+|-(?!-))*-->)*</p>
6.05
steamer25:
<p\s*>(?:(?:\ \;)|(?:\&\#0*160\;)|(?:<br\s*/?>)|\s|\u00A0|<!\-\-[^(?:\-\-)]*\-\->)*</p>
6.121
濃湯的是最快的,所以我會紀念他爲正確答案。
你在做什麼? – 2009-05-27 21:19:28
我試圖從html內容中剝離所有P標籤,這些標籤只包含:html註釋,不間斷空格,BR元素或空白字符。 – travis 2009-05-27 21:33:17