Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 替换0个或多个html标记中的文本_Oracle_Regexp Replace - Fatal编程技术网

Oracle 替换0个或多个html标记中的文本

Oracle 替换0个或多个html标记中的文本,oracle,regexp-replace,Oracle,Regexp Replace,我有一个包含varchar2字符串的列的表,如下所示 My dog chases my cat <p>My dog ate my other cat</p> <p><div id="abcd">My cat ate my hamster</div><p> <p><b><div id="abcd">My hamster sleeps all the time</div></

我有一个包含varchar2字符串的列的表,如下所示

My dog chases my cat
<p>My dog ate my other cat</p>
<p><div id="abcd">My cat ate my hamster</div><p>
<p><b><div id="abcd">My hamster sleeps all the time</div></b></p>
我需要对html标记中的文本执行SUBSTR

我认为编号组是一种方式,但我无法将结束标记放入自己的组中。这是我拥有的sql:


WITH sentences AS 
(
SELECT 1 as nr, 'My dog chases my cat' AS ln FROM DUAL
UNION
SELECT 2, '<p>My dog ate my other cat</p>' FROM DUAL
UNION
SELECT 3,'<p><x><div id="abcd">My cat ate my hamster</div></x></p>' FROM DUAL
UNION
SELECT 4,'<p><b><div id="abcd">My hamster sleeps all the time</div></b></p>' FROM DUAL
)
SELECT nr, regexp_replace(ln, '^((<[^>]+>)+)(.*)((<[^>]+>)+)$', 'group 1:\1,group 2:\2,group 3:\3,group 4:\4', 1, 1, 'n')
FROM sentences order by nr;

RETURNS

1   My dog chases my cat
2   group 1:<p>,group 2:<p>,group 3:My dog ate my other cat,group 4:</p>
3   group 1:<p><x><div id="abcd">,group 2:<div id="abcd">,group 3:My cat ate my hamster</div></x>,group 4:</p>
4   group 1:<p><b><div id="abcd">,group 2:<div id="abcd">,group 3:My hamster sleeps all the time</div></b>,group 4:</p>

第4组仅包含一个结束标记,其他结束标记位于第3组中,如第3行和第4行所示。我需要什么样的模式才能在他们自己的编号组中获得所有结束标记?

说过不要这样做,实际上对于这些特定值,您只剩下一个字符了:

WITH sentences AS 
(
SELECT 1 as nr, 'My dog chases my cat' AS ln FROM DUAL
UNION
SELECT 2, '<p>My dog ate my other cat</p>' FROM DUAL
UNION
SELECT 3,'<p><x><div id="abcd">My cat ate my hamster</div></x></p>' FROM DUAL
UNION
SELECT 4,'<p><b><div id="abcd">My hamster sleeps all the time</div></b></p>' FROM DUAL
)
SELECT nr,
  regexp_replace(ln, '^((<[^>]+>)+)(.*?)((<[^>]+>)+)$', 'group 1:\1,group 2:\2,group 3:\3,group 4:\4', 1, 1, 'n') as str
--------------------------------------^
FROM sentences order by nr;
或者只是那群人:

SELECT nr, regexp_replace(ln, '^((<[^>]+>)+)(.*?)((<[^>]+>)+)$', '\3', 1, 1, 'n') as str
FROM sentences order by nr;

NR STR                           
-- ------------------------------
 1 My dog chases my cat          
 2 My dog ate my other cat       
 3 My cat ate my hamster         
 4 My hamster sleeps all the time

说了不要这样做,对于这些特定的值,实际上只输出一个字符:

WITH sentences AS 
(
SELECT 1 as nr, 'My dog chases my cat' AS ln FROM DUAL
UNION
SELECT 2, '<p>My dog ate my other cat</p>' FROM DUAL
UNION
SELECT 3,'<p><x><div id="abcd">My cat ate my hamster</div></x></p>' FROM DUAL
UNION
SELECT 4,'<p><b><div id="abcd">My hamster sleeps all the time</div></b></p>' FROM DUAL
)
SELECT nr,
  regexp_replace(ln, '^((<[^>]+>)+)(.*?)((<[^>]+>)+)$', 'group 1:\1,group 2:\2,group 3:\3,group 4:\4', 1, 1, 'n') as str
--------------------------------------^
FROM sentences order by nr;
或者只是那群人:

SELECT nr, regexp_replace(ln, '^((<[^>]+>)+)(.*?)((<[^>]+>)+)$', '\3', 1, 1, 'n') as str
FROM sentences order by nr;

NR STR                           
-- ------------------------------
 1 My dog chases my cat          
 2 My dog ate my other cat       
 3 My cat ate my hamster         
 4 My hamster sleeps all the time
您可能能够使用这些特定字符串获得一些东西,但总的来说,这不是一个好主意。您可能能够使用这些特定字符串获得一些东西,但总的来说,这不是一个好主意。