【问题标题】:MySQL - need to find records without a period in themMySQL - 需要查找其中没有句点的记录
【发布时间】:2015-09-25 21:39:20
【问题描述】:

我访问过 MySQL 网站上的正则表达式页面,但无法正确查询。我有一个链接列表,我想找到不包含句点的无效链接。这是我的代码不起作用:

select * from `links` where (url REGEXP '[^\\.]')

它返回整个数据库中的所有行。我只是想让它显示“url”不包含句点的行。感谢您的帮助!

【问题讨论】:

    标签: mysql regex regex-negation


    【解决方案1】:
    SELECT c1 FROM t1 WHERE c1 NOT LIKE '%.%'
    

    【讨论】:

    • 这被证明是最快的方法。谢谢!顺便说一句,我会赞成你的回答,但我还没有 15 声望,哈哈
    【解决方案2】:

    您的正则表达式匹配任何包含不是句点的字符。因此,如果它包含foo.bar,则正则表达式匹配f 并成功。你可以这样做:

    WHERE url REGEXP '^[^.]*$'
    

    锚点和重复操作符会检查每个字符是否不是句点。或者你可以这样做:

    WHERE LOCATE(url, '.') = 0
    

    顺便说一句,当 . 在正则表达式中位于 [] 内时,您无需转义它。

    【讨论】:

    • 感谢您的深入解释。非常感谢!
    【解决方案3】:

    在这里使用regexp 似乎有点矫枉过正。一个简单的like 操作符就可以解决问题:

    SELECT * FROM `links` WHERE url NOT LIKE '%.%
    

    编辑:

    话虽如此,如果你真的想否定regexp,就用not regexp吧:

    SELECT * FROM `links` WHERE url NOT REGEXP '[\\.]';
    

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多