我有:
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中不匹配。怎么了?
答案 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外部助手中使用此查询,它就像魅力一样。