【问题标题】:Php, how to remove characters after asterisk and stop at file extensionPhp,如何删除星号后的字符并在文件扩展名处停止
【发布时间】:2016-12-14 22:18:50
【问题描述】:

我的 MYSQL 数据库中有以下图像,我想搜索和替换所有遵循该模式的图像(包括星号 * 在内的所有内容都必须删除,但文件扩展名需要保留 - * 后的字符数会有所不同,扩展名也是如此。) 提前感谢您的帮助!

这就是我所拥有的:

mo051316hires-5*100xx2304-2304-576-0.jpg

brandicourt-photo-high-res-1*100xx3264-3264-816-0.gif

这就是我想要的:

mo051316hires-5.jpg

brandicourt-photo-high-res-1.gif

【问题讨论】:

    标签: php mysql regex sql-update


    【解决方案1】:

    像这样使用preg_replace()

    $newFileName = preg_replace('/\*[^.]+/', '', $oldFileName);
    

    这会查找文字 * (\*) 和一个或多个非句点字符 ([^.]+) 并将它们替换为空字符串。

    3v4l.org demo

    【讨论】:

    • 非常感谢!
    • 有没有办法将它包含在 mysql 查询中(搜索和替换)?
    • @user1564379 因为你用php 标记了这个并在你的标题中写了“PHP,如何”,所以我没有意识到你试图在 MySQL 查询中执行此操作,而不是在 PHP 代码中。我很乐意解释如何做到这一点,但这是一种非常不同的解决方案。您可以考虑将其作为一个新问题提出并在 cmets 此处发布链接。
    【解决方案2】:

    使用 MySQL 修复现有数据:

    试试这个:

    SELECT CONCAT(
                SUBSTRING_INDEX(col, '*', 1),
                '.',
                SUBSTRING_INDEX(col, '.', -1)
        FROM ...
    

    如果好看就放

    UPDATE ...
        SET col = CONCAT ...
    

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2011-03-14
      • 2011-06-11
      相关资源
      最近更新 更多