MySQL中移除<>内内容并检索非标签文本的实现方法
在MySQL中查询HTML字段的非标签文本内容
要实现仅检索HTML字段中非<>包裹的文本、忽略所有标签内容的需求,可通过以下两种方式实现:
方法一:自定义去除HTML标签的函数
如果你的MySQL账号拥有创建函数的权限,可先定义一个清理HTML标签的函数,再基于处理后的内容查询:
DELIMITER // CREATE FUNCTION strip_html_tags(input TEXT) RETURNS TEXT DETERMINISTIC BEGIN DECLARE start_pos INT; DECLARE end_pos INT; DECLARE temp_text TEXT; SET temp_text = input; WHILE LOCATE('<', temp_text) > 0 AND LOCATE('>', temp_text) > LOCATE('<', temp_text) DO SET start_pos = LOCATE('<', temp_text); SET end_pos = LOCATE('>', temp_text); SET temp_text = INSERT(temp_text, start_pos, end_pos - start_pos + 1, ''); END WHILE; RETURN TRIM(temp_text); END // DELIMITER ;
创建完成后,即可用该函数过滤字段内容并执行查询,比如检索包含some wording的记录:
SELECT * FROM your_table WHERE strip_html_tags(your_html_field) LIKE '%some wording%';
方法二:使用正则替换(MySQL 8.0+)
若使用MySQL 8.0及以上版本,可直接利用内置的REGEXP_REPLACE函数一步完成标签清理与查询,无需自定义函数:
SELECT * FROM your_table WHERE REGEXP_REPLACE(your_html_field, '<.*?>', '') LIKE '%some wording%';
补充说明
- 正则表达式
<.*?>会匹配所有以<开头、>结尾的标签内容(包括自闭合标签),替换为空字符串后即可得到纯文本内容。 - 若HTML存在嵌套标签或特殊格式,可根据实际情况调整正则表达式,上述正则可覆盖绝大多数普通HTML场景。
内容的提问来源于stack exchange,提问作者Roger Reyes
相关产品推荐
相关产品推荐

