正則表達式用處非常大,規(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