编写正则需要可以泛用性匹配sql语句中where后面的内容仅包含大于、小于、等于、不等于判断语句中含有order-by时匹配为空n示例SQL为select--from-test-where-id--0-and-id--3-and-name-=-test-and-echo=sql-or-a!=b-order-by-name-desc
/(?<=where\s)(\w+\s*(>|<|!=|=)\s*('[^']'|[^'"<>=\s]+)\s(and|or)?\s*)*(?=order\sby|$)/i
解释:
- (?<=where\s):正向后查找,匹配 where 后的空白字符;
- (\w+\s*(>|<|!=|=)\s*('[^']'|[^'"<>=\s]+)\s(and|or)?\s*)*:匹配零个或多个条件,条件的格式为字段名+比较符+值+逻辑运算符(and 或 or);
- \w+:匹配字段名,其中 \w 表示匹配任意字母、数字或下划线;
- \s*:匹配零个或多个空白字符;
- (>|<|!=|=)\s*:匹配比较符(大于、小于、不等于、等于)和其后的空白字符;
- ('[^']'|[^'"<>=\s]+):匹配值,其中 '[^']' 表示匹配以单引号包围的任意字符,[^'"<>=\s]+ 表示匹配不含单引号、双引号、小于号、大于号、等于号和空白字符的任意字符;
- (and|or)?\s*:匹配逻辑运算符(and 或 or)和其后的空白字符,问号表示可选;
- (?=order\sby|$):正向前查找,匹配 order by 或字符串末尾。
原文地址: http://www.cveoy.top/t/topic/sed 著作权归作者所有。请勿转载和采集!