首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server中进行regex HTML标签替换?

如何在SQL Server中进行regex HTML标签替换?
EN

Stack Overflow用户
提问于 2010-04-12 23:21:13
回答 4查看 3.7K关注 0票数 0

我在SQL Server2005中有一个包含数百行HTML内容的表。其中一些内容包含HTML,如:

代码语言:javascript
复制
<span class=heading-2>Directions</span>

其中的“方向”根据页面名称的不同而变化。

我需要将所有的<span class=heading-2></span>标记更改为<h2></h2>标记。

我以前编写此查询是为了更改内容,但由于结尾HTML标记的原因,它不适用于我当前的问题:

代码语言:javascript
复制
Update  ContentManager
Set ContentManager.Content = replace(Cast(ContentManager.Content AS NVARCHAR(Max)), 'old text', 'new text')

有没有人知道我怎样才能完全用T- h2替换掉SQL?我发现的一切都表明我必须进行CLR集成。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-13 00:01:21

事实上,T-SQL本身并不支持正则表达式,这就是选择正则表达式作为工具的那类问题。首先,我要说的是,解决方案中的复杂程度在很大程度上取决于数据的一致性。例如,假设我们搜索标题为:

代码语言:javascript
复制
Select ..
From ...
Where HtmlContent Like '<span class="heading-2">%'

这假设spanclass之间没有额外的空格,并且在结束括号前的最后一个双引号之后也没有额外的空格。我们可以编写'%<span%class="heading-2"%>%'来说明空格,但这也会在与任何span标记相同的内容中找到标记为heading-2div标记。如果后一种情况不应该发生,但是您可能有不同的空格,那么使用这个修改过的模式。我们真正会遇到麻烦的地方是结束标签。假设我们的内容是这样的:

代码语言:javascript
复制
<span class="heading-2"> Foo <span class="heading-3">Bar</span> And Gamma Too</span> .... <span class="heading-4">Fubar Is the right way!</span>...

要找到正确的span结束标记来更改为</h2>并非易事。您不能简单地找到第一个</span>并将其更改为</h2>。如果您知道没有嵌套的span标记,那么您可以编写一个用户定义的函数来执行此操作:

代码语言:javascript
复制
Create Function ReplaceSpanToH2( @HtmlContent nvarchar(max) )
Returns nvarchar(max)
As
Begin
    Declare @StartPos int
    Declare @EndBracket int

    Set @StartPos = CharIndex('<span class="heading-2">', @HtmlContent)
    If @StartPos = 0
        Return @HtmlContent

    Set @HtmlContent = Replace(@HtmlContent, '<span class="heading-2">', '<h2>')

    -- find next </span>
    Set @StartPos = CharIndex('</span>', @HtmlContent, @StartPos)

    Set @HtmlContent = Stuff(@HtmlContent, @StartPos, 7, '</h2>')
    Return @HtmlContent
End
票数 1
EN

Stack Overflow用户

发布于 2010-04-13 03:13:18

如果您肯定所有都是有效的,且您使用的是SQL Server 2005或更高版本,则可以将列转换为XML数据类型并使用XQuery。请参阅http://msdn.microsoft.com/en-us/library/ms345117%28SQL.90%29.aspx

(注意:我还没有尝试过。)

不过,我认为最好的答案是Michael Petito的评论。我会写一个应用程序来做这件事,并使用Html Agility Pack。这将提供一个永久的、可维护的解决方案,几乎在所有情况下都可以工作。

(如果这是一次性的,并且你不关心准确性,那么选择你的毒药。)

票数 1
EN

Stack Overflow用户

发布于 2010-04-13 01:11:02

我对SQL Server并不是很在行,但下面是我尝试做到这一点的方法:

代码语言:javascript
复制
UPDATE TableName SET FieldName = REPLACE(FieldName ,'<span class=heading-2>', '<h2>') SET FieldName = REPLACE(FieldName, '</span>', '</h2>')

可能需要发出2条UPDATE语句,我不确定您是否可以以这种方式对同一字段进行操作。操作员确实说出了文本的所有出现。如果我遗漏了什么,请纠正我。

当然,如果有其他您不想更改的<span class=heading-2></span>文本,这将不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2623151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档