mysql正则表达式替换html标签

haiwei2011 2010-07-15 09:44:21
数据库中我有一张表,里面有一个字段存的是静态页面的html和文本的整合的内容,现在我想通过sql来查询这张表,搜索出里面该字段值中文本内容包含搜索值的记录,而html标签中是否包含不管。

现在是由于没有找到mysql中正则表达式替换的方法,来过滤这个字段,把html标签去不过滤掉,然后我再进行比较查询,请问大家是否有比较好的方法来做这个啊?

说明:其实这个可以在java代码中做的,java里面有可以过滤html标签的正则表达式,也是可行的,但是由于数据量太多了,所以我不想在代码中过滤比较,只想在sql层次上来解决这个问题。
当然我也想到了,再加一个字段专门用来存这个文本内容的,搜索时搜这个,显示时用那个带html标签的,但是我感觉不好。
...全文
1350 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiwei2011 2010-07-22
  • 打赏
  • 举报
回复
如果大家有更好的建议,可以告诉我,这是我邮箱carlhaiwei@gmail.com,谢谢啦
haiwei2011 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 acmain_chm 的回复:]
存储过程等同于自己写程序来分析字符串,把<...>的东西都去掉。
你可以自己先写起来,有什么问题可以贴出来大家一起讨论。
[/Quote]

我是这么写的,
DELIMITER $$

DROP FUNCTION IF EXISTS `abgent_website`.`removeHtml`$$

CREATE FUNCTION `removeHtml`(s varchar(255)) RETURNS varchar(255)
BEGIN
declare d int(20);
declare dd int(20);
declare sumstr varchar(255);
while (instr(s,'<')!=0 && instr(s,'>')!=0) do

set d = instr(s,'<');
set dd = instr(s,'>');
set sumstr = substr(s,1,d-1);
set s = substr(s,dd+1);
set s = concat(sumstr,s);
end while;
return s;
END$$

DELIMITER ;


我是这么写的,但是我感觉里面不太好,一旦我想在里面写入带<>内容,它都给我过滤掉了,其实我只想过滤属于html标签的一些内容,而不是所有带<>尖括号的内容
ACMAIN_CHM 2010-07-16
  • 打赏
  • 举报
回复
[Quote]存储过程怎么写啊,sql都不支持替换,意思存储过程里就支持了吗,不会写,麻烦能不能给个例子啊,谢谢啦[/Quote]存储过程等同于自己写程序来分析字符串,把<...>的东西都去掉。
你可以自己先写起来,有什么问题可以贴出来大家一起讨论。
rucypli 2010-07-16
  • 打赏
  • 举报
回复
replace(replace(content,'<br>',''),'<p>','')
haiwei2011 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]

MYSQL中通过其标准的函数无法用SQL语句实现。MYSQL中仅支持REGEXP的简单匹配查询,不支持REGEXP_REPLACE。

可以在MYSQL中自己写存储函数来实现。
[/Quote]

存储过程怎么写啊,sql都不支持替换,意思存储过程里就支持了吗,不会写,麻烦能不能给个例子啊,谢谢啦
ACMAIN_CHM 2010-07-16
  • 打赏
  • 举报
回复
MYSQL中通过其标准的函数无法用SQL语句实现。MYSQL中仅支持REGEXP的简单匹配查询,不支持REGEXP_REPLACE。

可以在MYSQL中自己写存储函数来实现。
haiwei2011 2010-07-16
  • 打赏
  • 举报
回复
create table test1
(
id int(10),
content text
)
insert into test1 values('1','List:wo kao <br> <p>xxx xxx</p><li>A</li><li>B<li>C<B>this is b!</B><table><tr><td>3434 34342 13132</td><tr></table>')
你可以插入n条类似的记录,现在我想通过sql查出
List:wo kao xxx xxxABCthis is b!3434 34342 13132
这个结果,即把里面的html标签全部过滤掉
ACMAIN_CHM 2010-07-15
  • 打赏
  • 举报
回复
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

56,798

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧