2017-09-15 7 views
1

私は、データ内のHTMLコンテンツの下にあります。SQL Serverの正規表現クリーンタグ

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

は、私は、クエリで正規表現を使用して、内部テキスト<span with class='cssname'と一緒にすべての特定のタグを削除します。

私が好きな予想される出力は次のようになります。

'outer text further text' 
+0

私は誰かが、コード4私を書きたいです。 – SteveFest

+0

これは、検索後に挿入する前に、HTML Parserを使用してDBの外で行う方がよいでしょう。 –

+0

ご返信ありがとうございます。しかし、私はSQLのDBレベルではなく、コードパーサでhtmlパーサを使用してこれを行うことを望みます。誰もがこのためのSQLクエリを助けることができます。 –

答えて

0

正規表現は完全に他の言語のようにSQL Serverでサポートされていません。これは1つのタグに対して機能します。

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

この方法では、通常のテキストから<content>の要素を作成するためにHTMLを微調整し、XMLとして結果をキャストします。これはCROSS APPLY部分で行われます。

2番目の手順では、XQueryを使用して<content>要素内のテキストを照会します(したがって、<span>要素を取り除きます)。


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 

結果:

outer text further text