案例:最近在使用notepad++做sql格式化,select*********from 之间的逗号后面的数据进行换行再加一个制表符,直接一个正则表达式搞定:,\s?(?=*?from)
SELECT biz_date,
SUM(bigorder_add_consum_1m) 分子,
SUM(bigorder_add_consum_cnt_1m) 分母
FROM table_bussion
WHERE biz_date >= SUBDATE(CURDATE(),80)
AND biz_date <= CURDATE()
GROUP BY biz_date
ORDER BY biz_date ;
但是如果有多个sql的话,就会把where条件中的逗号也换行,原因是where后面的逗号在下一个sql的from前面
更新后的表达式: ,(?=((?!select).)*?from)
释义:
,(?=((?!select).)*?from)
- ,匹配逗号
- \s?匹配一个空格,可有可无
- (?=...)向前断言,这个有点不太好理解,举例: ..(?=llo) 匹配helloworld时得到的结果为 he,匹配到he时,下一个查找的数据为llo,而不是w,这一块网上百度吧
- (?!...) 消极向前断言
此正则使用场景:
select 1,2,3 from 1,2,3 select 1,2,3 from 1,2,3 select 1,2,3 from 1,2,3
只想匹配select和from之间的逗号,即可使用上述正则
自认为正则已经写的很好了,但是这个小玩意还是卡了一个小时,本来是调试好,后面在notepad++里面执行又报错,今天又可以了,后来发现是notepad内存不支持,发现超过2046个字符就会报此异常, 减掉一些数据就可以正常搜索了,
特此记录,共勉