如何使用sql文本字段中的html标签“grep”行?

时间:2013-10-01 19:10:54

标签: html mysql sql

mysql表在名为“body”的字段中包含超过74000个条目。

我需要一个只包含包含HTML标记的行的视图。

示例:

记录1 =>

Lorem ipsum dolor sit amet, <a href="http://foo.bar">consetetur</a> sadipscing elitr\n
sed diam nonumy eirmod temporary invidunt ut labore et dolore\n
<hr>
aliquyam magna erat, sed diam voluptua.

记录2 =&gt;

At vero eos et <strong>accusam</strong> et justo duo dolores et ea rebum.\n
Stet clita kasd gubergren, No sea takimata sanctus est Lorem\n
ipsum dolor sit amet.

记录= 3&gt;

Lorem ipsum dolor sit amet, consetetur sadipscing elitr\n
<ul><li>sed</li> <li>diam</li></ul> nonumy eirmod temporary invidunt ut labore et dolore\n
aliquyam magna erat, sed diam voluptua.

输出应仅包含带有HTML标记的行:

记录1 =&gt;

Lorem ipsum dolor sit amet, <a href="http://foo.bar">consetetur</ a> sadipscing elitr\n

记录2 =&gt;

At vero eos et <strong>accusam</strong> et justo duo dolores et ea rebum.\n

记录3 =&gt;

<ul><li>sed</li> <li>diam</li></ul> nonumy eirmod temporary invidunt ut labore et dolore\n

我需要通过脚本运行手动审核输出。

有没有人知道相应的sql select语句,例如

SELECT `body` FROM `messages` WHERE `body` REGEXP -> `<regexp_for_html-tags_here>`;

或类似的东西。

问候

1 个答案:

答案 0 :(得分:0)

如果你想使用正则表达式,你可以这样做:

SELECT body 
FROM messages 
WHERE body REGEXP '.*<[:alpha:][:alnum:]*.*>.*';

修改

在评论中有些人提到了表现。您可以使用LIKE和REGEXP的组合来提高性能 - 即like语句会将数据缩小到有趣的行,然后REGEXP可以优化搜索(例如,以避免出现这些字符而不是潜在标记的问题名)。

SELECT body 
FROM messages 
WHERE body like '%<%>%' 
and body REGEXP '.*<[:alpha:][:alnum:]*.*>.*';

http://sqlfiddle.com/#!2/70c47/2