首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL文本字段中查找和替换整个单词?

如何在MySQL文本字段中查找和替换整个单词?
EN

Stack Overflow用户
提问于 2011-01-28 14:26:10
回答 7查看 4K关注 0票数 3

我有句话:

“如何从mysql数据库中查找和替换文本中的单词?”

和MySQL表字,具有to 3列id、word和replaceWord。我在数据库里有4000多个单词。

表:

代码语言:javascript
复制
id     word     replaceWord
 1     text     sentence
 2     word     letter
 3     mysql    MySQL
 4     ..       ...
 5     ..       ...
 6     ..       ...

结果:

“如何从MySQL数据库中查找和替换语句中的字母?”

我知道如何在没有数据库的情况下做到这一点,但我需要数据库。

代码语言:javascript
复制
 <?php
$text="How to find and replace word in text from mysql database?";
$replaceWord=array(  "text" => "sentence", "word" => "letter", "mysql" => "MySQL");
echo strtr($tekst, $replaceWord);
?>
EN

回答 7

Stack Overflow用户

发布于 2011-01-28 14:32:43

代码语言:javascript
复制
update YourTable, Words
    set YourTable.YourColumn = replace(YourTable.YourColumn, Words.word, Words.replaceWord)
票数 3
EN

Stack Overflow用户

发布于 2019-10-30 14:49:26

MySQL 8+

使用REGEXP_REPLACE函数可以很容易地做到这一点:

代码语言:javascript
复制
SELECT REGEXP_REPLACE(the_text,
                      CONCAT('(^|\\W)', text_to_find, '(\\W|$)'),
                      CONCAT('$1', replacement_text, '$2')) AS replaced_text
FROM the_table;

这个dbfiddle演示

说明:\W是一个非单词字符的正则表达式语法(反斜杠需要转义,因此是\\W)。或者,^为文本的开头提供服务,而$则是文本的末尾。$1$2将括号内的捕获组中的这些字符放回替换文本中。

MySQL版本在8之前

如果您被迫使用早期版本的MySQL,那么使用自定义的正则表达式替换器在技术上还是可行的--参见这个答案获取详细信息。

MariaDB 10.0.5+

正如Paul Spiegel在评论中指出的那样,支持REGEXP_REPLACEREGEXP_REPLACE版本的唯一区别是使用\\1\\2而不是$1$2来识别捕获组:

代码语言:javascript
复制
SELECT REGEXP_REPLACE(the_text,
                      CONCAT('(^|\\W)', text_to_find, '(\\W|$)'),
                      CONCAT('\\1', replacement_text, '\\2')) AS replaced_text
FROM the_table;

这个dbfiddle演示

票数 3
EN

Stack Overflow用户

发布于 2011-01-28 14:35:34

代码语言:javascript
复制
//load all replacements
$result = mysql_query("SELECT * FROM YourTableNameHere");
//replace all words
$words = array();
$replacewords =array();
while ($row = mysql_fetch_assoc($result)) {
    $words[] = $row['word'];
    $replacewords[] = $row['replaceword'];
}
$text = str_replace($words,$replacewords);

如果还需要preg_replace :必须将列isPattern添加到表中,则可以这样做:

代码语言:javascript
复制
//load all replacements
$result = mysql_query("SELECT * FROM YourTableNameHere");
//replace all words
$words = array();
$replacewords = array();
$preg_words = array();
$preg_replacewords = array();
while ($row = mysql_fetch_assoc($result)) {
    if(!$row['isPattern']){        
        $words[] = $row['word'];
        $replacewords[] = $row['replaceword'];
    }
    else{
        $preg_words[] = $row['word'];
        $preg_replacewords[] = $row['replaceword'];
    }
}
$text = str_replace($words,$replacewords);
$text = $preg_replace($preg_words,$preg_replacewords);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4829281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档