【问题标题】:SQL Server regular expressions clean tagsSQL Server 正则表达式清除标记
【发布时间】:2018-02-24 15:41:23
【问题描述】:

我在数据中有以下 HTML 内容:

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

我想在查询中使用正则表达式删除所有特定标签以及内部文本&lt;span with class='cssname'

我喜欢的预期输出是:

'outer text further text'

【问题讨论】:

  • 我希望有人给我写代码 4。
  • 这最好在数据库之外使用 HTML 解析器在插入后检索之前完成。
  • 感谢您的回复。但我希望在 SQL 数据库级别而不是在代码端使用 html 解析器来执行此操作。任何人都可以为此提供 sql 查询。
  • 任何答案对您有用吗?如果是这样,请please upvote any such answers and accept the one that is most useful to you.

标签: sql sql-server regex sql-server-2012


【解决方案1】:

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,'')

【讨论】:

    【解决方案2】:

    这种方式调整 HTML 以从常规文本创建 &lt;content&gt; 元素并将结果转换为 XML。这是在CROSS APPLY 部分完成的。

    第二步使用 XQuery 查询 &lt;content&gt; 元素中的文本(从而剥离 &lt;span&gt; 元素)。


    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      相关资源
      最近更新 更多