【问题标题】:MySQL (MariaDB 10.1) find and replace/delete string with REGEXMySQL (MariaDB 10.1) 使用 REGEX 查找和替换/删除字符串
【发布时间】:2017-05-24 16:42:31
【问题描述】:

我有一个产品注释列,其中许多包含以下(以及其他信息):

<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on 02-17-2017. May still be available.</strong></em></p>

我的更改日期为 02-17-2017(但将始终采用该格式)。我可以仅使用数据库查询查找并删除这些字符串(保留列中的其余数据,例如 MySQL REPLACE() 但使用正则表达式匹配日期)还是我需要在 PHP 中执行此操作?

【问题讨论】:

    标签: mysql regex mariadb


    【解决方案1】:
    WHERE notes LIKE '<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on %. May still be available.</strong></em></p>'
    

    请注意,我在字符串中添加了%

    我不明白“删除那些字符串”——你想用空字符串替换它们吗? NULL?删除notes 列中包含该行的?还有什么?我希望WHERE 子句足以让您朝着正确的方向前进。

    注意:REGEXP 是“矫枉过正”; LIKE 就够了。

    如果您想删除日期但保留字符串的其余部分,那么这不是吗?...

    UPDATE tbl
        SET notes = '<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on xxxxxxxxxxx. May still be available.</strong></em></p>'
        WHERE notes LIKE '<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on %. May still be available.</strong></em></p>';
    

    (或任何你想用作占位符的东西。)

    MariaDB-10.0.5 有这些:REGEXP_REPLACE()、REGEXP_INSTR() 和 REGEXP_SUBSTR();但我认为它们对于您的情况不是必需的。

    【讨论】:

    • 我需要找到该特定字符串并将其删除,将其余数据留在列中。基本上是一个 REPLACE() 但使用正则表达式来匹配日期。
    • 这个字符串周围还有其他包含日期的数据。所以例如blah blah blah

      2017 年 2 月 17 日,商品从 ESP 数据馈送中删除,并且价格已从网站上删除。可能仍然可用。

      blah blah blah 我想删除

      从 ESP 数据馈送中删除的项目和从网站于 2017 年 2 月 17 日。可能仍然可用。

      同时离开blah blah blahblah blah blah
    • 好的,然后在LIKE 字符串的开头和结尾添加%LIKE '%&lt;p&gt;...on % ... &lt;/p&gt;%' 并希望没有使此搜索无效的边缘情况或拼写变体。
    • 您的解决方案不会删除字符串。请参阅下面的解决方案。
    【解决方案2】:

    我能够做到:

    UPDATE `ii_Product` 
    SET `notes`= REGEXP_REPLACE(`notes`, '\n?<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on .*\. May still be available.<\/strong><\/em><\/p>\n?\n?', '')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2019-04-30
      • 2018-01-09
      • 2014-04-19
      • 2019-09-28
      • 2011-08-22
      相关资源
      最近更新 更多