我找到了this very interesting function on internet:
CREATE OR REPLACE FUNCTION strip_tags(TEXT) RETURNS TEXT AS $$
SELECT regexp_replace(regexp_replace($1, E'(?x)<[^>]*?(\s alt \s* = \s* ([\'"]) ([^>]*?) \2) [^>]*? >', E'\3'), E'(?x)(< [^>]*? >)', '', 'g')
$$ LANGUAGE SQL;
但它不会删除HTML代码,如:"
是否可以使用regexp_replace删除它们?
3条答案
按热度按时间nwlqm0z11#
是的,可以使用函数将HTML或其他字符实体替换为相应的字符。首先创建一个角色实体表:
这是一个函数:
这样使用它:
它只适用于UTF-8。
oknwwptz2#
这句经典的话可能适用于这里:* 有些人在遇到问题时会想:“我知道了,我会用正则表达式。“现在他们有两个问题。* 正则表达式是有用的,但HTML解析不是一个很适合他们的工作。Jeff Atwood explains this well。要正确地从HTML中剥离标签,需要进行某种解析。
我建议您使用更强大的PL(如
PL/Perl
或PL/Pythonu
)来调用成熟且经过良好测试的HTML剥离库。例如,您可以通过plperl
函数使用Perl的HTML::Strip
,该函数接受text
并返回text
。处理这个问题的快速而肮脏的方法是使用另一层
regexp_replace
表达式来转换实体。这将很快导致你的the path alluded to by Igor下降,最好通过使用现有的工具来避免。例如,如果您使用HTML::Strip
,它将使用HTML::Entities
为您转换实体作为过程的一部分。nkhmeac63#
我已经成功地使用了一段时间-谢谢你的解决方案。但是我刚刚发现,这似乎不适用于HTML项目,如²(上标2 = ²),我怀疑任何其他HTML项目,有数字只是在结束“;“.
我相信这条线
应该是
我试过几个例子,它似乎工作。