一些数据截取我们经常会用到正则处理,这里做个常用正则的备忘录
. 匹配除换行符 \n 之外的任何单字符
* 匹配前面的子表达式零次或多次,相当于{0,}
+ 匹配前面的子表达式一次或多次,相当于{1,}
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符,相当于{0,1}
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用
\ 转义符
| 或者
[ ] 匹配指定范围内的任意单个字符
[^ ] 匹配指定范围外的任意单个字符
例如有如下的SQL除了用专门的SQL解析工具也可以使用正则处理,需要从中截取a.locationId = '${WHERE.A6605}'
信息替换为其他内容
SELECT
a.organizationId,
a.warehouseId,
a.locationId,
b.zoneGroup,
a.zoneId,
b.zoneDescr,
d.zoneGroupDescr
FROM
BAS_LOCATION a
LEFT JOIN BAS_ZONE b ON a.organizationId = b.organizationId
AND a.warehouseId = b.warehouseId
AND a.zoneId = b.zoneId
LEFT JOIN BAS_ZONEGROUP d ON a.organizationId = d.organizationId
AND a.warehouseId = d.warehouseId
AND d.zoneGroup = b.zoneGroup
WHERE
1 = 1
AND a.locationId = '${WHERE.A6605}'
ORDER BY
a.zoneId
代码实现:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String pa = "((?i)(AND|WHERE)){1}([^AND])+((?i)(\\$\\{WHERE\\.)).+?'";
Matcher m = Pattern.compile(pa).matcher(orginSql);
if(m.find()){
String regex = m.group(i);
...
m.replaceAll(where.toString());
}