MySQL正则替换整个单词

\b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是 \b 并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
如果需要更精确的说法,\b 匹配这样的位置:它的前一个字符和后一个字符必须是\w (字母数字)和 \W (非字母数字),即匹配必须出现在 \w (字母数字)和 \W (非字母数字)字符之间的边界上。
\b属于匹配位置的元字符,一般作占位作用,而不被捕获,同属于匹配位置的还有匹配行起始位^和行结束位$

什么是位置

It's a nice day today.

'I' 占一个位置,'t' 占一个位置,所有的单个字符(包括不可见的空白字符)都会占一个位置,这样的位置我给它取个名字叫“显式位置”。

注意:字符与字符之间还有一个位置,例如'I''t'之间就有一个位置(没有任何东西),这样的位置我给它取个名字叫“隐式位置”。

“隐式位置”就是 \b 的关键!通俗的理解,\b 就是“隐式位置”。

此时,再来理解一下这句话:

如果需要更精确的说法,\b 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在) \w

我用我的话来翻译一下这句话:

“隐式位置” \b,匹配这样的位置:它的前一个“显式位置”字符和后一个“显式位置”字符不全是 \w

此时,再来理解一下这句话:

如果需要更精确的说法,\b 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在) \w。

我用我的话来翻译一下这句话:

“隐式位置” \b,匹配这样的位置:它的前一个“显式位置”字符和后一个“显式位置”字符不全是 \w。

实例讲解

就用 “It’s a nice day today.” 举例说明:

正确的正则:\bnice\b

分析:第一个 \b 前面一个字符是空格,后面一个字符是 ‘n’,不全是 \w,所以可以匹配出 ‘n’ 是一个单词的开头。第二个 \b 前面一个字符是 ‘e’,后面一个字符是空格,不全是 \w,可以匹配出 ‘e’ 是一个单词的结尾。所以,合在一起,就能匹配出以 ‘n’ 开头以 ‘e’ 结尾的单词,这里就能匹配出 “nice” 这个单词。

错误的正则:a\bnice

分析:我见过有人类似于这样来写正则,想要达到的目的是匹配出上一个单词以 ‘a’ 结尾,下一个单词以 ‘n’ 开头的部分,这里想匹配出 “a nice”。但是这个正则表达的可不是这个目的,\b 前面是字符 ‘a’,后面是字符 ‘n’,两个都是“显式字符”,显然违背了 \b 的含义,所以这就是个错误的表达式,匹配不出任何东西。想要匹配出 “a nice”,正确的正则写法是:a\b.\bnice(不能换行)

MySQL 正则替换:精确匹配 “abc” 单词(使用 \b

在数据库操作中,字符串替换是一个常见的需求。MySQL 提供了正则表达式支持,可以用来实现复杂的匹配和替换操作。在某些场景下,我们需要精确匹配并替换整个单词,而不替换包含该单词的其他字符串。本文将介绍如何在 MySQL 中使用正则表达式中的 \b 来匹配单词边界,精确匹配并替换整个单词 “abc”。

问题描述

我们需要将 MySQL 表中某一列包含的单词 “abc” 替换为 “xyz”,但不替换包含 “abc” 的其他字符串(例如 “abcd”、“abc1” 等)。

创建示例表

首先,我们创建一个示例表 example_table 并插入一些测试数据:

CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,text_column VARCHAR(255)
);INSERT INTO example_table (text_column) VALUES
('abc'),
('abcd'),
('efg abc hijkl'),
('xyz'),
('abc123'),
('123 abc 456');

使用正则表达式匹配整个单词

MySQL 8.0 及以上版本支持正则表达式中的单词边界断言 \b,我们可以利用这个断言来匹配整个单词。

使用正则表达式 \b

我们使用 \b 来匹配单词边界,正则表达式如下:

  • \babc\b

这个正则表达式的含义是:

  • \b 匹配单词边界。
  • abc 匹配字符串 “abc”。
使用 REGEXP_REPLACE 函数

MySQL 8.0 及以上版本支持 REGEXP_REPLACE 函数,该函数允许我们使用正则表达式进行替换。我们将使用 REGEXP_REPLACE 函数来替换精确匹配的单词 “abc” 为 “xyz”。

UPDATE example_table
SET text_column = REGEXP_REPLACE(text_column, '\\babc\\b', 'xyz');

这个语句将匹配到的整个单词 “abc” 替换为 “xyz”。

结果验证

执行上述 UPDATE 语句后,我们查询 example_table,查看替换结果:

SELECT * FROM example_table;

结果应为:

+----+----------------+
| id | text_column    |
+----+----------------+
|  1 | xyz            |
|  2 | abcd           |
|  3 | efg xyz hijkl  |
|  4 | xyz            |
|  5 | abc123         |
|  6 | 123 xyz 456    |
+----+----------------+

从结果可以看出,只有精确匹配的 “abc” 被替换为了 “xyz”,而包含 “abc” 的其他字符串(如 “abcd”、“abc123”)未受影响。

总结

本文介绍了如何在 MySQL 中使用正则表达式进行字符串替换,实现精确匹配整个单词 “abc” 而不影响其他包含 “abc” 的字符串。通过使用 REGEXP_REPLACE 函数和 \b 单词边界断言,我们可以灵活地进行复杂的字符串替换操作。这种方法适用于需要精确匹配和替换的场景,是在 MySQL 中处理文本数据的有效手段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nanjing university

NJFU forest university 南林 Focus: NJFU specializes in forestry, environmental science, and related fields.Strengths:优势 If you’re passionate about environmental conservation, forestry, or related disciplines, NJFU might be a great fit.Consideration:注意…

WPF学习日常篇(一)--开发界面视图布局

接下来开始日常篇,我在主线篇(正文)中说过要介绍一下我的界面排布,科学的排布才更科学更有效率的进行敲代码和开发。日常篇中主要记录我的一些小想法和所考虑的一些细节。 一、主界面设置 主界面分为左右两部分,分为…

有什么免费视频翻译软件?安利5款视频翻译软件给你

随着“跨文化交流”话题的热度不断攀升,越来越多的视频内容跨越国界,触及全球观众。 在这一趋势下,视频翻译行业迎来了巨大的发展机遇。然而,面对众多的视频翻译工具,如何挑选出最合心意的那款呢? 现在&a…

【C++】从零开始构建红黑树

送给大家一句话: 日子没劲,就过得特别慢,但凡有那么一点劲,就哗哗的跟瀑布似的拦不住。 – 巫哲 《撒野》 🌋🌋🌋🌋🌋🌋🌋🌋 ⛰️⛰️…

latex文字竖排

\documentclass{article} \usepackage{graphicx} \usepackage{multirow}\begin{document}\begin{table}[htbp]\centering\begin{tabular}{|c|c|c|c|}\hline\rotatebox{90}{\textbf{第一列}} & \textbf{第二列} & \textbf{第三列} & \textbf{第四列} \\\hlineItem 1…

matlab使用教程(78)—控制颜色图范围

1.控制颜色图范围 对于您创建的许多类型的可视化图形,MATLAB 默认将完整的数据范围映射到颜色图上。数据中的最小值映射到颜色图中的第一行,最大值映射到颜色图中的最后一行。所有中间值线性映射到颜色图的中间行。 这种默认映射适用于大部分情况&#x…

auto关键字(C++11)

auto关键字(C11) 文章目录 auto关键字(C11)前言一、auto使用规则二、auto不适用的场景三、auto推荐适用的场景总结 前言 在C11中,auto关键字能够自动推导出变量的实际类型,可以帮助我们写出更加简洁、现代…

【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串

【LeetCode刷题】Day 7 题目1:209.长度最小的子数组思路分析:思路1:暴力枚举 O(N^2^)思路2:滑动窗口 O(N) 题目2:3. 无重复字符的最长子串题目分析:思想1:暴力枚举哈希表O(N^2^)思想2&#xff1…

【C语言】八进制、十六进制

前言 在我们日常生活中使用的数往往是十进制的,而当我们学习C语言后我们会接触到许多不同的进制并且时常需要去思考与使用这些不同的进制(尤其是2的幂相关的进制,因为这种计数系统比十进制更接近于计算机的二进制系统)&#xff0…

【图解IO与Netty系列】IO的同步与异步、阻塞与非阻塞,Linux五种IO模型

IO的同步与异步、阻塞与非阻塞,Linux五种IO模型 IO的同步与异步,阻塞与非阻塞阻塞IO与非阻塞IO同步IO与异步IO Linux五种IO模型BIONIOIO多路复用信号驱动IOAIO IO的同步与异步,阻塞与非阻塞 我们有时会看到类似于同步阻塞式IO、同步非阻塞式…

(避坑)SpringSecurity关于使用.antMatchers放行接口不生效问题

问题 在使用SpringSecurity的时候发现放行指定接口一直没有生效,使用"/**"就可以生效的问题 关于securityConfig的配置代码 Beanprotected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.csrf().disable() // 关闭csrf防护…

博客开始使用 Cache Master 缓存插件

明月在给大家推荐 Cache Master 插件的时候(可参考【推荐个比较纯正的缓存插件——Cache Master】一文),仅仅是在其他站点上试用了一下,今天明月正式在博客上用上了 Cache Master,没有想到对 Dragon 主题的支持竟然是出…

Java中的泛型擦除(Type Erasure)详解

在Java编程中,泛型(Generics)是一个强大的工具,它允许程序员在编写代码时定义和使用类型参数,从而编写更灵活、可重用的代码。然而,Java的泛型实现有一个重要的特点,即类型擦除(Type…

RUST 和 GO 如何管理它们的内存

100编程书屋_孔夫子旧书网 Go 中的内存管理 Go 中的内存不会在缓存键被驱逐时立即释放。 相反,垃圾收集器会经常运行以发现任何没有引用的内存并释放它。 换句话说,内存会一直挂起,直到垃圾收集器可以评估它是否真正不再使用,而…

rtsp协议分析

rtsp概述 rtsp (real-time stream protocol)实时流媒体控制协议。RFC2326:这是RTSP的初始定义版本v1.0,由哥伦比亚大学、网景和RealNetworks公司提交给互联网工程任务组(IETF)作为RFC标准。RFC7826:这是RTSP的后续更新…

Java进阶学习笔记14——模板方法设计模式

面试和看源码。 谈到设计模式: 1、解决了什么问题? 2、怎么写? 模板方法设计模式解决了什么问题? 解决方法中存在重复代码的问题。 写法: 1)定义一个抽象类: 2)在里面定义两个方…

JAVA面试题大全(十五)

1、Zookeeper 是什么? zookper是一个分布式的,开放源码的分布式应用程序协调服务。是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护…

C# 控制台应用模板可生成顶级语句

C# 控制台应用模板可生成顶级语句 项目2024/01/0810 个参与者 反馈 本文内容 使用新的程序样式隐式 using 指令全局 using 指令使用旧程序样式 从 .NET 6 开始,新 C# 控制台应用的项目模板在 Program.cs 文件中生成以下代码: C#复制 // See https…

C++ prime 第五版 第14章 重载运算与类型转换

一、基本概念 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。 我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说&…

某方protobuf闲谈

问题 当我们去看某方的时候,搜索了关键词svm,然后通过抓包查看,请求的Request Payload是一串看不懂的乱码,并且返回的数据也大部分是乱码 观察请求的Content-Type是application/grpc-web+proto,没错数据的传输是protobuf的形式了 protobuf的相关概念和原理,网上有很多教…