如何使用正则表达式在html标记<p>
和</p>
之间获取字符串?
'<div class="ExternalClass849E0BFE74914F8BB79B2C64E3D07AE6"><p>Just help me!</p></div>'
此致 埃利奥·费尔南德斯
答案 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)
)
此代码使用SUBSTRING
和CHARINDEX
来查找您感兴趣的代码的位置。
首先找到<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)