【发布时间】:2015-09-25 21:39:20
【问题描述】:
我访问过 MySQL 网站上的正则表达式页面,但无法正确查询。我有一个链接列表,我想找到不包含句点的无效链接。这是我的代码不起作用:
select * from `links` where (url REGEXP '[^\\.]')
它返回整个数据库中的所有行。我只是想让它显示“url”不包含句点的行。感谢您的帮助!
【问题讨论】:
标签: mysql regex regex-negation
我访问过 MySQL 网站上的正则表达式页面,但无法正确查询。我有一个链接列表,我想找到不包含句点的无效链接。这是我的代码不起作用:
select * from `links` where (url REGEXP '[^\\.]')
它返回整个数据库中的所有行。我只是想让它显示“url”不包含句点的行。感谢您的帮助!
【问题讨论】:
标签: mysql regex regex-negation
SELECT c1 FROM t1 WHERE c1 NOT LIKE '%.%'
【讨论】:
您的正则表达式匹配任何包含不是句点的字符。因此,如果它包含foo.bar,则正则表达式匹配f 并成功。你可以这样做:
WHERE url REGEXP '^[^.]*$'
锚点和重复操作符会检查每个字符是否不是句点。或者你可以这样做:
WHERE LOCATE(url, '.') = 0
顺便说一句,当 . 在正则表达式中位于 [] 内时,您无需转义它。
【讨论】:
在这里使用regexp 似乎有点矫枉过正。一个简单的like 操作符就可以解决问题:
SELECT * FROM `links` WHERE url NOT LIKE '%.%
编辑:
话虽如此,如果你真的想否定regexp,就用not regexp吧:
SELECT * FROM `links` WHERE url NOT REGEXP '[\\.]';
【讨论】: