登录  /  注册

MySQL中使用replace、regexp进行正则表达式替换的用法分析

黄舟
发布: 2017-03-15 17:17:02
原创
3652人浏览过

这篇文章主要介绍了mysql中使用replace、regexp进行正则表达式替换的用法,结合具体实例形式分析了replace、regexp正则替换的使用技巧与相关注意事项,需要的朋友可以参考下

本文实例讲述了MySQL中使用replace、regexp进行正则表达式替换的用法。分享给大家供大家参考,具体如下:

今天一个朋友问我,如果将数据库中查到的类似于“./uploads/110100_cityHotel_北京富豪华宾馆.jpg”这样的格式都修改为“./uploads/110100cityHotel北京富豪华宾馆.jpg”这样的格式。我本人是没有这样处理过数据的,但是我知道mysql是可以使用replace做到的,而且正则表达式也可以做到。

如何做呢?

我们只需要这样一条语句即可,

代码如下:

update master_data.md_employee set name=replace(name,"_",'') where id = 825;
登录后复制

-- 注replace(字段名,"需要替换的字符","替换的字符"),这样即可。

在Mysql中,replace和regexp主要是通过sql语句实现数据的替换。

我们先来说说replace 的具体用法。

mysql replace用法

1.replace into

代码如下:

replace into table (id,name) values('1′,'aa'),('2′,'bb')
登录后复制

此语句的作用是向表table中插入两条记录。如果主键id为1或2不存在

就相当于

代码如下:

insert into table (id,name) values('1′,'aa'),('2′,'bb')
登录后复制

如果存在相同的值则不会插入数据

2.replace(<a href="http://www.php.cn/wiki/60.html" target="_blank">object</a>,search,replace)

把object中出现search的全部替换为replace

代码如下:

select replace(&#39;www.jb51.net&#39;,&#39;w&#39;,&#39;Ww&#39;)
登录后复制

例:把表table中的name字段中的aa替换为bb

代码如下:

update table set name=replace(name,&#39;aa&#39;,&#39;bb&#39;)
登录后复制

由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。

当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

扩展正则表达式的一些字符是:

· ‘.'匹配任何单个的字符。

· 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。

· “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。

如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。

为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询

1.为了找出以“d”开头的名字,使用“^”匹配名字的开始:

代码如下:

SELECT * FROM master_data.md_employee WHERE name REGEXP &#39;^d&#39;;
登录后复制

这样的结果集是不区分大小写的,如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘d'。

代码如下:

SELECT * FROM master_data.md_employee WHERE name REGEXP BINARY&#39;^d&#39;;
登录后复制

为了找出以“love”结尾的名字,使用“$”匹配名字的结尾:

代码如下:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP &#39;love$&#39;;
登录后复制

为了找出包含一个“w”的名字,使用以下查询:

代码如下:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP &#39;w&#39;;
登录后复制

既然如果一个正则表达式出现在值的任何地方,其模式匹配了,就不必在先前的查询中在模式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样。

为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:

代码如下:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP &#39;^.....$&#39;;
登录后复制

你也可以使用“{n}”“重复n次”操作符重写前面的查询:

代码如下:

SELECT id,name FROM master_data.md_employee WHERE name REGEXP &#39;^.{5}$&#39;;
登录后复制

这些知识一些简单的mysql的replace和regexp的用法,对于深入的学习,我们会在之后的文章会将具体的例子以及用法写出

以上就是MySQL中使用replace、regexp进行正则表达式替换的用法分析的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号