0

我有:

  • Astring有值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我的实际代码中提取的。

你可以在这里看到我正在使用的正则表达式

我的问题是正则表达式在 MySql 中不匹配。它出什么问题了?

4

3 回答 3

1

在这里找到了解决方案:Using Columns in a RegExp in MySQL。我需要将单个字符串对象发送到正则表达式中:

REGEXP concat('^([a-zA-Z0-9]+\.)*', domain, '$')
于 2012-10-27T08:05:40.687 回答
0

尝试更好的类似查询:

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

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

于 2012-10-27T07:18:23.387 回答
0

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

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

我在我的 Squid ACL External Helper 中使用了这个查询,它就像一个魅力。

于 2014-09-30T17:14:11.347 回答