正则表达式高阶(二)

前言

前两天遇到一个场景,事情是这样的,做一个项目的迁移,本来一切是很美好的,服务都打包好了,包括数据库相关的脚本都准备好了,一切看起来很顺利,可是在启动服务的时候提示 “table xx.xx does’not exist”。
这就有点懵了,sql脚本已经执行完成了(我看着执行过程的),为什么还提示没有表?随即联系运维看了下数据库,核对了下表确实存在,仔细一看又不对,错误信息提示的表不存在表名是小写的,而运维给到的表名是大写的!

这就有点尴尬了,不知道sql脚本是谁准备的(肯定是用工具导出的),表名变为了大写(我们使用的是mysql数据库,一般习惯是 mysql 数据库表名,字段名小写,oracle 则通常采用大写),然后查阅了一下发现 mysql 的 lower_case_table_names 配置决定 mysql 对表名大小写是否敏感。
通过

SHOW VARIABLES  LIKE "%lower%";

发现我们的数据库该值是 0,刚好是区分大小写的!

此时最方便的解决办法莫过于是改变这个配置,然后重启 mysql 服务。但是,由于这个数据库不知我们这个服务在使用,因此这个方案就不用考虑了,剩下的那就只能是表脚本中的表名统一改为大写。
打开 sql 脚本一看,将近 400 个表,一个一个改,这工作量…

于是想到最近很多地方使用正则的场景就想通过正则能不能完成这个事情,询问度娘很快就有了解决方案,通过正则可以轻松应付这个场景。

正则提供的大小写转换说明

正则提供了将字符转为大小写的功能:

\U  将字符转为大写(U应该就是UpperCase的首字母吧)
\L  将字符转为小写(L应该就是LowerCase的首字母吧)
\E  停止转换

案例

先拿几个案例练练手。

转大写:

today is a nice day.

  1. 将上面的语句的首字母转为大写
# 查找表达式
^(.)

# 替换表达式
\U$1
结果:Today is a nice day.
  1. 将上面语句的每个单词的首字母转为大写
# 查找表达式
\b([^\s])([a-z]*)\b

# 替换表达式
\U$1\E$2
结果:Today Is A Nice Day.

转小写:

TODAY IS A NICE DAY.

  1. 将上面语句每个字母都转为小写
# 查找表达式
\b([^\s.]+)\b

# 替换表达式
\L$1
结果:today is a nice day.
  1. 将上面语句每个单词的非首字母转为小写
# 查找表达式
\b([^\s.])([^\s.]*)\b

# 替换表达式
$1\L$2\E
结果:Today Is A Nice Day.

实际运用

有了上面的例子,我们的场景就很好处理了,直接写出正则以及替换表达式

(?i)(TABLE|INSERT\s+INTO|UPDATE|DELETE\s+FROM)(\s+)\b([A-Z_-]+)\b

查找所有的 建表、更新表结构、插入数据、删除语句中的表名部分

表名转为大写:

$1$2\U$3\E

表名转为小写:

$1$2\L$3\E

editplus、notepad++、idea 等工具都支持使用正则替换。

好了,只需要这样一个正则,这个场景就能轻松应付。感谢大家的阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL正则表达式是一种用于匹配字符串的规则。在MySQL中,可以使用REGEXP关键字来指定正则表达式的匹配模式。正则表达式可以用来检索、替换符合某个规则的文本。\[1\]\[2\] 例如,可以使用正则表达式来查询以"li"开头的学生信息:SELECT id, name FROM students WHERE name REGEXP '^li';\[1\] 在MySQL的正则表达式中,星号"*"可以匹配任意多个字符。例如,在字符串"Computer"、"Economy"和"Music"中,字母"C"后面没有出现字母"h",但仍然满足匹配条件。\[3\] #### 引用[.reference_title] - *1* [(六)MySQL数据库高阶语句之正则表达式、运算符、连接表达式JOIN](https://blog.csdn.net/weixin_56667320/article/details/118774514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MySQL数据库基本操作-正则表达式](https://blog.csdn.net/qq_53060585/article/details/122560478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL之正则表达式(REGEXP)](https://blog.csdn.net/weixin_43901865/article/details/119948773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不务正业的攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值