2013-04-18 38 views
3

這個偉大的工程從字符串/ DB文本類型字段刪除所有的HTML,我怎麼能忽略休息標籤:刪除斷行標記的正則表達式

update hazHRA set identityRisk=dbo.RegexReplace('<(?:[^>''"]*|([''"]).*?\1)*>', 
'',identityRisk,1,1); 

我希望保持

<br> 

只有

回答

1

這應該做的工作:

(?i)<(?:(?!br>|br/>)[^>'"]*|(['"]).*?\1)*>

(?i):不區分大小寫。

(?!br />):消極向前。

Online demo


如果能在向前看符號使用量詞,你可以使用這個:

(?i)<(?:(?!br\s*>|br\s*/>)[^>'"]*|(['"]).*?\1)*>

這將確保不帶空格匹配<br >

Online demo

+1

我還建議在不區分大小寫的情況下添加「BR」的任何奇怪組合。還要在'br'和括號之間添加通配符,以處理用戶可以在HTML標記中添加的任意數量的空格,參見[here](http://rubular.com/r/ywhcBEfFdn)。 – Walls

+0

@Walls我使用PHP PCRE preg_replace函數對它進行了測試,問題在於它不能使用量詞的前瞻。我找不到一個在線SQL正則表達式測試器,所以我不確定它是否適用於SQL? – HamZa

+1

我看到你傾向於SQL的問題,我通常只是在像Rubular這樣的常規在線正則表達式測試regex類型的東西。如果不能使用量詞是有道理的,但我認爲不區分大小寫會使OP的正則表達式更強。 – Walls