美文网首页
正则表达式妙用

正则表达式妙用

作者: _Xie_ | 来源:发表于2019-04-19 21:59 被阅读0次

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

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

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

blog: C#正则表达式替换

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

背景:由于工作内容是替换整个底层框架,数据库也由 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, @"(?<field>(\b|[\u4e00-\u9fa5])+(\w*|[\u4e00-\u9fa5])+(?=(\s*)(\>=|\>|=|\<\>|!=|\<|\<=|like|(\s+)is(\s+))(\s*)(\b|'|%|[\u4e00-\u9fa5]+)))", "\"${field}", RegexOptions.IgnoreCase);

相关文章

网友评论

      本文标题:正则表达式妙用

      本文链接:https://www.haomeiwen.com/subject/qkbzfqtx.html