mysql怎么替换oracle中的regexp_replace正则函数?

这是一个陷阱,别以为8 .0下是单独写的。

mysql中regexp正则表达式使用大全

哦,刚开始学这些东西的时候我很头疼。
MySQL 正则表达式真的不是开玩笑。
他们恐怕已经跑不了了。

我记得有一年,大概是 2 01 8 年,在一个项目中,我必须使用正则表达式来匹配用户填写的电子邮件地址。
当时我根据网上查到的资料尝试了很长时间。
最初,从发送邮件的用户中选择REGEXP '^[a-zA-Z0-9 ._%+-]+@[a-zA-Z0-9 .-]+\.[a-zA-Z]{2 ,}$',结果总是有一些邮件无法匹配,或者正确却报错。
后来发现自己平时写得太死板,中间忘了加点东西,只好回去按照教程一点点改正。

看,基本用法是这样说的。
匹配任何字符,并且必须用 \ 转义。
我有一个真实的场景。
2 01 9 年的北京,客户名单里有一个带+号的手机号码。
当我直接用REGEXP检查时,认为是特殊字符,结果没有查到。
我必须使用 SELECT FROM Customers WHERE phone REGEXP '^[0-9 \+]+$' 来执行此操作。

此外,通配符可匹配任意数量的字符,以行 ^ 开头并以行 $ 结尾。
我以前就经历过这个陷阱。
例如,当我想检查整列是否为空时,我想当然地使用了^$,但结果是错误的。
我必须使用 SELECT FROM 记录,其中出现消息 REGEXP '^$'。
否则验证时间会很长,而且你也得不到任何结果。

选择匹配 |我很少用这个,但我记得有一次要匹配两种地址格式,一个逗号分隔,一个没有,所以我用了 SELECT FROM Address WHERE REGEXP address '^(.+, .+)|(.+)$',这花了我很长时间。

贪婪模式/非贪婪模式,我不太喜欢这个,看起来不太有用。
但你是对的,默认就是贪婪,有时你会发现不该发现的东西。
与电话号码区号替换一样,使用 REGEXP_REPLACE 时应小心。

在实际应用场景中,验证邮箱地址、提取URL肯定会起作用。
我记得2 02 0年我在上海的时候,有一个电商项目。
用户填写的地址有不同的格式。
使用正则表达式提取县市省去了很多麻烦。
只需要经常测试即可,不能像写SQL条件那样随便写。

注释中提到,不要写得太复杂。
我很明白这一点。
我曾经写过一个复杂的正则表达式,但是查询结果非常慢,而且后端还卡住了。
后来分成几个简单或者常见的查询就解决了。

性能问题当数据量很大时,处理这个问题确实必须小心。
我有一个包含数百万个条目的客户表。
我直接使用复杂的正则表达式来检查这一点,但服务器几乎崩溃了。
最后采用简单的条件过滤,在应用层进行正则处理。

测试环境,这个是必不可少的。
我有一个项目,一位新同事写了一条常规规则。
测试环境运行得很好,但是一旦投入生产就崩溃了,发现数据全错了。
后来发现测试数据量不足,生产数据有很多奇怪的格式。
因此,团队现在必须在测试环境中实施所有正常规则。

调试在线工具我还没有真正用过这么多,但是你说得对,对于复杂的正则表达式,如果你在网页上一一尝试,会比检查数据库慢,但至少不会让系统崩溃。

总的来说,MySQL正则表达式是个好东西,但必须用在正确的地方、以正确的方式。
不要使用生产环境进行训练,并注意不要导致数据库崩溃。

MySQL中如何用正则表达式替换指定字符串及之后文本?