有没有一种方法可以维护一些标签以及标签之间的文本,使用Postgresql中的正则表达式从HTML文本中排除不需要的标签? 我想使用regexp_replace,因为regexp_matches会导致一组数组,当我在很长的文本中使用时会减慢查询速度。
我设法匹配了要保留的标签。例如:
select regexp_replace(
'<diversity bad text> <div good text> <br> <invalid> </div> mantain1 <division> mantain2 </invalid> mantain3',E'</?(div|br)( [^>]*?>|>)','OUT','gi');
结果:
<diversity bad text> OUT OUT <invalid> OUT mantain1 <division> mantain2 </invalid> mantain3
但是当我尝试反转比赛时,事情就失去了控制。
我使用负前瞻得到的最接近的是:
select regexp_replace(
'<diversity bad text> <div good> <br> <invalid> </div> mantain1 <division> mantain2 </invalid> mantain3',E'<(?!div|br)(.+?)>','gi');
结果:
<diversity bad text> <div good text> <br> OUT OUT mantain1 <division> mantain2 OUT mantain3
但是显然我不是想要的。
文本的预期结果:
<diversity bad text> <div good> <br> <invalid> </div> mantain1 <division> mantain2 </invalid> mantain3
是:
OUT <div good> <br> OUT </div> mantain1 OUT mantain2 OUT mantain3