MySQL Regexp匹配带或不带子域的域

时间:2012-10-27 07:13:35

标签: php mysql

我有:

  • string,其值为www.facebook.com
  • allowed_domain,其值为facebook.com

我试着看看域名字符串(带子域名)是否与列匹配(没有子域名):

SELECT * FROM MyTable
   WHERE 'www.facebook.com' REGEXP '^([a-zA-Z0-9]+\.)*' + allowed_domain + '$' 

字符串“www.facebook.com”是从我实际代码中的referrer中提取的。

You can see the regexp I'm using in action here

我的问题是regexp在MySql中不匹配。怎么了?

3 个答案:

答案 0 :(得分:1)

在此处找到解决方案:Using Columns in a RegExp in MySQL。我需要将一个字符串对象发送到regexp中:

REGEXP concat('^([a-zA-Z0-9]+\.)*', domain, '$')

答案 1 :(得分:0)

尝试更好的查询:

... WHERE domain like '%.facebook.com'

您也可以为没有子域的facebook.com添加规则,但这应该有用。

答案 2 :(得分:0)

您找到的解决方案不准确。该正则表达式可以匹配不需要的域,如fakefacebook.com。请试试这个:

SELECT * FROM MyTable WHERE allowed_domain='www.facebook.com' OR 'www.facebook.com' LIKE concat('%.', allowed_domain)

我在我的Squid ACL外部助手中使用此查询,它就像魅力一样。