2017-09-15 21 views
1

I unter HTML-Inhalte in Daten:SQL Server reguläre Ausdrücke sauber Tags

outer text <span class="cssname">inner text to be removed along with tags</span> further text 

I <span with class='cssname' alle spezifischen Tags zusammen mit dem darin enthaltenen Text entfernen möchten, in einer Abfrage regulären Ausdruck.

Die erwartete Ausgabe Ich mag ist:

'outer text further text' 
+0

Ich möchte jemanden Code 4 mir schreiben. – SteveFest

+0

Dies wäre besser außerhalb der DB mit einem HTML-Parser vor dem Einfügen von nach dem Abruf getan werden. –

+0

danke für Ihre Antwort. Aber ich möchte dies auf SQL-Db-Ebene tun und nicht auf Code-Seite mit HTML-Parser. Kann jemand mit SQL-Abfrage dafür helfen. –

Antwort

0

Reguläre Ausdrücke sind nicht vollständig in SQL Server unterstützt wie in anderen Sprachen. Dies funktioniert für ein einzelnes Tag.

declare @var nvarchar(256) = N'outer text <span class="cssname">inner text to be removed along with tags</span> further text' 

select 
    stuff(@var,charindex('<',@var),charindex('>',@var,charindex('</',@var)) - charindex('<',@var) + 1,'') 
0

Auf diese Weise zwickt die HTML-<content> Elemente aus dem regulären Text zu erstellen und wirft das Ergebnis als XML. Dies geschieht im CROSS APPLY Teil.

Der zweite Schritt verwendet eine XQuery, um den Text in den Elementen <content> abzufragen (wodurch die <span> Elemente entfernt werden).


DECLARE @tt TABLE(t NVARCHAR(MAX)); 
INSERT INTO @tt(t)VALUES(N'outer text <span class="cssname">inner text to be removed along with tags</span> further text'); 

SELECT 
    stripped=CAST(x.query('for $i in (/content) return $i/text()') AS NVARCHAR(MAX)) 
FROM 
    @tt 
    CROSS APPLY (
     SELECT 
      x=CAST('<content>'+REPLACE(REPLACE(t,'<span','</content><span'),'/span>','/span><content>')+'</content>' AS XML) 
    ) AS f 

Ergebnis:

outer text further text