正則表達式用處非常大司志,規(guī)則也是復(fù)雜難記,很容易讓人望而卻步降宅。
以下示例也只是用到了其中的兩個特性骂远。對于這種難記又難用,but
功能強大的工具腰根。個人一貫宗旨是:熟悉工具有哪些特性激才,能用來干什么,不會用去查额嘿,反正資源那么多
- 正則表達式 - 分組
filterCondition = Regex.Replace(conditions, @"(?<chinese>[\u4e00-\u9fa5]+)", "\"${chinese}\"");
- 正則表達式 - 零寬先行斷言
- 相關(guān)博客:正則表達式30分鐘入門
用于工作中(很長瘸恼,慢慢拼湊出來的)
背景:由于工作內(nèi)容是替換整個底層框架,數(shù)據(jù)庫也由
SQLServer
改為PostgreSQL
岩睁,而前端存在大量的WHERE 子句
钞脂,不太可能逐個修改前端。由于中文以及SQL 語法
的細小差異捕儒,造成后端服務(wù)無法解析冰啃,需要經(jīng)過一層轉(zhuǎn)換。
由于之前被正則表達式徹底征服過刘莹,查閱收藏了一些關(guān)于正則的高級用法阎毅,奈何記不住。
工作中遇到該問題時点弯,腦海中出現(xiàn)一絲疑問:能不能用正則來解決扇调?
于是就有了下面一串冗長的字符串,功能就是提取 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# 實現(xiàn)
// 匹配字段,加雙引號
filterCondition = Regex.Replace(conditions, @"(?<field>(\b|[\u4e00-\u9fa5])+(\w*|[\u4e00-\u9fa5])+(?=(\s*)(\>=|\>|=|\<\>|!=|\<|\<=|like|(\s+)is(\s+))(\s*)(\b|'|%|[\u4e00-\u9fa5]+)))", "\"${field}", RegexOptions.IgnoreCase);
- 交互式教程
regexone