MySQL 跨表正则表达式匹配。

3

我有一个网络应用程序,正在开发一个引擎来分析推荐来源。

现在我有一个包含页面浏览量和参考来源的表格,看起来像这样:

pv_id        referer
------------------------------------------------------------
5531854534   http://www.google.com/search?ie=UTF-8...
8161876343   http://google.cn/search?search=human+rights
8468434831   http://search.yahoo.com/search;_...

第二个表格包含源定义,例如:
source       regex
------------------------------------------------------------
Google       ^https?:\/\/[^\/]*google\.([a-z]{2,4})(\/.*)?$
Yahoo        ^https?:\/\/[^\/]*yahoo\.com(\/.*)?$

我想要的是通过连接这两个表创建的第三张表:
pv_id        source
------------------------------------------------------------
5531854534   Google
8161876343   Google
8468434831   Yahoo

如何使用正则表达式连接这些表格?
更新:
将正则表达式的最后一部分从 (\/.*|) 更改为 (\/.*)?

1
你的正则表达式结尾的管道符号有什么作用?是从右数第三个字符吗? - Konerak
最后一个括号要么选择/something(即\/.*部分),要么为空(管道符之后没有任何内容:) 这些正则表达式在正则表达式编辑器中有效。但我将尝试不使用管道符。 - Josef Sábl
我将括号改为 (\/.*)?,现在它可以工作了,谢谢! - Josef Sábl
2个回答

3

试试这个:

select t1.pv_id, t2.source
from table1 t1
  inner join table2 t2 on (t1.referer regexp t2.regex)

这个不起作用。SELECT 'http://www.google.com/' REGEXP '^https?:\/\/[^\/]*google\.com(\/.*|)$' 给了我 #1139 - Got error 'empty (sub)expression' from regexp。也许我的正则表达式有问题? - Josef Sábl

1

MySQL:

SELECT a.pv_id, b.source 
FROM a, b
WHERE a.referer REGEXP b.regex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接