【问题标题】:replace words in mysql替换mysql中的单词
【发布时间】:2013-03-20 05:24:58
【问题描述】:

我想使用 PHP 和 MySQL 替换文本字符串中的一些单词。

例如-

数据库中的文本列包含值“Word1 word2 word3 word4 word5 word3”。

我想用“newword”替换“word3”和“word4”。挑战是不要替换最后一个单词,它也是“word3”

有什么建议吗?

【问题讨论】:

  • 这个问题没有显示任何研究工作。 做好功课很重要。告诉我们您发现了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案。 FAQ.
  • 建议学习str_replace()等字符串函数
  • 在数据库中替换还是在输出中替换?
  • @JohnConde - 我确实研究了 srt_replace 函数,据我了解,它无法指定您想要更新字符串的起始字和结束字
  • @hjpotter92 - 我正在尝试替换字符串并最终将其存储在数据库中。如果这可以直接在数据库中完成,我猜也可以

标签: mysql replace updates


【解决方案1】:

您可以使用通配符和控制符号来替换 %word% 或 %wo.d%,就像在达到一定数量的符号时停止替换一样

【讨论】:

  • 另外,如果你想替换 'word1, word2, word3, word4, word3' 之类的东西,你可以UPDATE table SET col = 'word,1 word2, wordX, word4, word3' where col = 'word1, word2, word3, word4, word3' 但我不认为它是做某事的通用方法,比如搜索也无济于事
【解决方案2】:

您可以使用此 php 脚本将“word3”和“word4”替换为“newword”。

$arr = array("word1","word2","word3","word4","word5","word3","word4");

print_r(str_replace("word3","newword",$arr,$i));

print_r(str_replace("word4","newword",$arr,$i));

echo "替换:$i"; ?>

【讨论】:

    【解决方案3】:

    在 PHP 中:

    <?php
    $mystr = "Word1 word2 word3 word4 word5 word3";
    $mywords = explode(' ', $mystr);
    for ($i = 0; $i < count($mywords)-1; $i++) {
      if ($mywords[$i] == 'word3' || $mywords[$i] == 'word4') {
        $mywords[$i] = 'newword';
      }
    }
    $newstr = implode(' ', $mywords);
    print("newstr = $newstr");
    ?>
    

    这会将单词拆分为一个数组,将所有word3word4 替换为数组的最后一个元素的newword except,然后将单词重新组合成一个字符串。输出符合预期:

    Word1 word2 newword newword word5 word3
    

    【讨论】:

      【解决方案4】:

      MySQL:

      UPDATE `tableName`
      SET `field` = REPLACE( ' word3 ', ' newword ', REPLACE(' word4 ', ' newword ', `field`) );
      

      注意word3word4 前后的多余空格。


      基于 cmets:

      UPDATE `tableName`
      SET `field` = TRIM( REPLACE(' word3 word4 ', ' newword ', CONCAT( ' ', `field` )) );
      

      【讨论】:

      • 嘿,谢谢。我想用一个新词实际替换 word3 和 word4。同样从上面的陈述,不会两个 word3 的实例都被替换了吗?
      • 但它不会处理最后一个字。请参阅帖子“挑战不是替换最后一个单词,它也是“word3””
      • 它将处理最后一个单词,因为 REPLACE 参数中的尾随空格。但我认为它不会处理 word3word4first 单词的情况。也许将field 更改为CONCAT(' ', field)
      • @user2131970 已编辑回复。
      • @SureshKamrushi 我认为这就是它正在做的事情。
      猜你喜欢
      • 2014-06-03
      • 2011-04-27
      • 2021-12-29
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多