正则表达式妙用

正则表达式用处非常大,规则也是复杂难记,很容易让人望而却步。

以下示例也只是用到了其中的两个特性。对于这种难记又难用,but 功能强大的工具。个人一贯宗旨是:熟悉工具有哪些特性,能用来干什么,不会用去查,反正资源那么多

  • 正则表达式 - 分组
filterCondition = Regex.Replace(conditions, @"(?[\u4e00-\u9fa5]+)", "\"${chinese}\"");

blog: C#正则表达式替换

  • 正则表达式 - 零宽先行断言
  • 相关博客:正则表达式30分钟入门

用于工作中(很长,慢慢拼凑出来的)

背景:由于工作内容是替换整个底层框架,数据库也由 SQLServer 改为 PostgreSQL,而前端存在大量的 WHERE 子句,不太可能逐个修改前端。由于中文以及 SQL 语法 的细小差异,造成后端服务无法解析,需要经过一层转换。

由于之前被正则表达式彻底征服过,查阅收藏了一些关于正则的高级用法,奈何记不住。

工作中遇到该问题时,脑海中出现一丝疑问:能不能用正则来解决?
于是就有了下面一串冗长的字符串,功能就是提取 where 子句字段名,并加上双引号

  • 提取 操作符前的名字,并加上双引号

如何验证:https://regexr.com/

((\b|[\u4e00-\u9fa5])*(\w*|[\u4e00-\u9fa5])+(?=(\s*)(\>=|\>|=|\<\>|!=|\<|\<=|like|Like|LIKE|(\s+)is(\s+))(\s*)(\b|'|%|[\u4e00-\u9fa5]+)))
  • 测试用例(纯粹测试)
啊a is auu管材 is null and cad图层>= %100% and bcd   <= 300 or  acbb is not null ac<=hht or ccc换行 is null and acd中 is null CAD集 !=  '%新城、or a老城管 <> 爱%科技20181219v2.0 or a like 'bt'

cad <= '注记'   <= htth
  • C# 实现
// 匹配字段,加双引号
filterCondition = Regex.Replace(conditions, @"(?(\b|[\u4e00-\u9fa5])+(\w*|[\u4e00-\u9fa5])+(?=(\s*)(\>=|\>|=|\<\>|!=|\<|\<=|like|(\s+)is(\s+))(\s*)(\b|'|%|[\u4e00-\u9fa5]+)))", "\"${field}", RegexOptions.IgnoreCase);

  • 交互式教程
    regexone

你可能感兴趣的:(正则表达式妙用)