1

我有一个带有 Doc TEXT 列的 mysql 表。

该列包含 HTML 作为内容。

我想选择带有过滤的列以仅从内容中获取 URL。列内容包含 A HREF="(.*)" 。

我尝试了mysql的REGEXP,但它只会返回true或false,而不是过滤后的匹配。

非常感谢您的帮助。

4

2 回答 2

1

如果您的 HTML 列文本是明确定义的 XML(即带有适当结束标记的 XHTML),您可以使用 MySQL 的extractValue()函数将其解析为使用 Xpath 的 XML。

CREATE TABLE links (anchor VARCHAR(100) NOT NULL);

INSERT INTO links VALUES ('<a href="http://stackoverflow.com/">Stack Overflow</a>');

SELECT extractValue(anchor, '/a/@href') FROM links; -- prints http://stackoverflow.com/

如果该列包含其他标签(例如<body>等),只需相应地修改您的 Xpath ( //body/a/@href)。

编辑:对于您在下面的评论中共享的 HTML 列:

<HTML><HEAD><TITLE>*******</TITLE></HEAD><BODY><P><A HREF="http://www.google.com">GOOGLE</A></P><div><A HREF="http://www.yahoo.com">YAHOO</A></DIV><TABLE><TR><TD><A HREF="http://www.bing.com">BING</A></TD></TR></TABLE></BODY></HTML>

extractValue()xpath 需要修改为(//A/@HREF区分大小写)

SELECT extractValue(anchor, '//A/@HREF') FROM links;
-- prints http://www.google.com http://www.yahoo.com http://www.bing.com

另外,请注意关闭<div>with</DIV>不是正确的 XML,但不知何故 MySQL 忽略了它。

于 2013-05-18T08:36:09.177 回答
0

根据@Barmar 的建议,我在谷歌搜索并得到了 1 个解决方案。

PREG 的用户定义函数。(Perl 兼容正则表达式)
http://www.mysqludf.org/
https://github.com/mysqludf/lib_mysqludf_preg#readme
所有函数看起来都不错,我们可以像使用任何其他语言一样应用正则表达式(Perl、PHP 等)

注意:但它需要 c++ 程序编译和安装到 mysql

于 2013-05-23T09:45:33.737 回答