2017-09-15 37 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解析器在数据库之外进行更好。 –

+0

感谢您的回复。但我希望在SQL db级别执行此操作,而不是在使用html解析器的代码一侧执行此操作。任何人都可以帮助与此查询SQL查询。 –

回答

0

正则表达式是不完全SQL Server支持像其他语言。这将用于单个标签。

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

这样调整的HTML创建从普通文字<content>元素和注塑结果作为XML。这在CROSS APPLY部分中完成。

第二步使用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