【问题标题】:Search MySQL database tables for URLs在 MySQL 数据库表中搜索 URL
【发布时间】:2021-10-28 16:18:17
【问题描述】:

我正在尝试在表中搜索包含 URL 的 text 列。所以我用了这个:

SELECT * FROM table WHERE text REGEXP '((http|ftp|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)'

但我在下面收到此错误

#1139 - 从正则表达式中得到错误“重复运算符操作数无效”

我需要获取 text 列包含 URL 字符串的行,如下所示:

"Hello http://www.google.com World http://examples.com"

【问题讨论】:

  • 你不需要那么大的模式来检查是否有 URL,试试'(http|ftp)s?://'
  • @WiktorStribiżew 但是当文本有类似No john don't use http:// use https:// instead 的内容时,它不包含 URL,但它会被选中...请你告诉我一个确保选中的正确方法text 有 URL 吗?
  • 我觉得还是'(http|ftp)s?://[^/[:space:]]+\\.[[:alpha:]]+'
  • 什么版本的 MySQL? (8.0 改变了语法。)

标签: mysql regex


【解决方案1】:

你可以使用

REGEXP '(http|ftp)s?://[^/[:space:]]+\\.[[:alpha:]]+'

图案的意思:

  • (http|ftp) - httpftp
  • s? - 一个可选的s
  • :// - :// 字符串
  • [^/[:space:]]+ - 除了/ 和空格之外的一个或多个字符
  • \\. - .(实际上是 \. 文本)
  • [[:alpha:]]+ - 一个或多个字母。

【讨论】:

    【解决方案2】:

    在字符类中包含破折号时,请小心。它有特殊的含义。

    [\w_-]
    

    -->

    [-\w_]
    

    破折号在第一个位置并不特殊,所以它只是另一个字符。

    如果您使用的是 8.0,请将所有反斜杠加倍。

    [-\\w_]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多