【问题标题】:Regex Search in phpMyAdminphpMyAdmin 中的正则表达式搜索
【发布时间】:2012-04-15 07:17:50
【问题描述】:

尝试将 Drupal 站点中的“文件”文件夹位置从 /files 更改为 /sites/default/files。

为了避免更改其他任何内容,例如

  http://www.google.com/profiles/

我正在尝试使用带有单词边界的基本正则表达式。

  \bfiles/

regexpal 的快速检查按预期工作,但是当我在 phpMyAdmin 搜索中输入上述内容时,选中“作为正则表达式”复选框,我没有得到预期的结果。

两个问题:

  • 我应该如何编写带有单词边界的表达式以便它在 phpMyAdmin 中工作?

  • 我真的是 SQL 语句的新手!是否可以编写一个 SQL 查询来简单地查找每次出现的“files/”并将其替换为“sites/default/files/”?

【问题讨论】:

    标签: mysql sql regex search phpmyadmin


    【解决方案1】:

    根据MySql docs,使用的正则表达式风格是 POSIX 1003.2。对于这种正则表达式,单词边界如下:

    [[:<:]](开始)[[:>:]](结束)

    所以你的正则表达式是:

    [[:<:]]files/
    

    如果您想使用 sql 从表中的特定字段中搜索和替换 [[:&lt;:]]files/ 的所有实例,您可以 use a UDF such as the one found here

    此外,在 MySql 中使用正则表达式时,您应该注意以下几点:

    因为 MySQL 在字符串中使用 C 转义语法(例如,“\n” 表示换行符),您必须将您输入的任何“\”加倍 在您的 REGEXP 字符串中使用。

    【讨论】:

    • 不是真的!在您的示例中,“files/”将不匹配,那么如果我搜索“files/”,“profiles/”也将匹配...
    • @PatrickS 啊,我明白了。抱歉,我没有考虑不包含 / 的相对路径。我已经用更好的解决方案更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2014-06-02
    • 2023-04-10
    • 2013-08-16
    相关资源
    最近更新 更多