使用正则表达式检索html标记之间的字符串

时间:2018-06-18 13:25:43

标签: sql-server sql-server-2012

如何使用正则表达式在html标记<p></p>之间获取字符串?

'<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>​Just help me!</p></div>'

此致 埃利奥·费尔南德斯

5 个答案:

答案 0 :(得分:3)

如果您的数据可以容忍转移到XML,您可以这样做:

declare @s varchar(1000) = '<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>​Just help me!</p></div>';

select cast(@s as xml).value('(//p/text())[1]', 'varchar(1000)');

答案 1 :(得分:1)

这不是你通常想做的事情,但可以用简单的字符串来实现。

DECLARE @s VARCHAR(1000) = '<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>​Just help me!</p></div>';

SELECT SUBSTRING(@s, 
                 CHARINDEX('<p>', @s) + LEN('<p>'), 
                 CHARINDEX('</p>', @s, CHARINDEX('<p>', @s))
                 - LEN('</p>') - CHARINDEX('<p>', @s)
                 )

此代码使用SUBSTRINGCHARINDEX来查找您感兴趣的代码的位置。

首先找到<p>,然后找到</p>之后的第一个实例。 LEN的使用是将起点和终点移动到不包括您在其间搜索的标记。

希望这有帮助!

答案 2 :(得分:1)

我使用CHARINDEX找到答案,但如果有办法用REGEX做,欢迎你!

DECLARE @Obs  nvarchar(400)

SET @Obs = '<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>​Just help me!</p></div>'

SELECT 
CASE WHEN CHARINDEX('<p>', [Obs])  <= 0 THEN ''
            ELSE SUBSTRING([Obs],CHARINDEX('<p>', [Observacoes]) + 3,CHARINDEX('</p>', [Obs]) - CHARINDEX('<p>', [Obs]) - 3) END AS OBS
FROM mytable

答案 3 :(得分:0)

您应该能够使用PATINDEX(查找搜索)和SUBSTRING( string start length )在p标签之间提取文本。

DECLARE @myString VARCHAR(max)
SET @myString='<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>​Just help me!</p></div>'
SELECT SUBSTRING(@myString,PATINDEX('%<p>%',@myString)+3,PATINDEX('%</p>%',@myString)-PATINDEX('%<p>%',@myString)-3)

会产生'Just Help me!'的结果。

根据您尝试使用该文本的内容,可能更容易将其提取到别处。

答案 4 :(得分:0)

它的hacky as sin

但是,如果您希望能够在网页上找到可能不同的条目而不仅仅是单个

其中@search是div的名称,@toSearch是html内容

 declare @search nvarchar(200) = 'ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6'

 declare @toSearch nvarchar(4000)
 = 'Lorem ipsum dolor sit amet.<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>Just help me!</p></div>Lorem ipsum dolor sit amet.'

 DECLARE @start int
    ,@end int


 select @start = CHARINDEX('<p>',@toSearch,CHARINDEX(@search,@toSearch)) +3
 select @end = CHARINDEX('</p>',@toSearch,CHARINDEX(@search,@toSearch))

 select SUBSTRING(@toSearch,@start,@end - @start)