对于DB2示例,grant如下所示。
grant insert,update,delete on ABC.TABLE_NAME to group DACT_RW, group DACT_RW_BATCH1
我正在尝试使用以下内容构建regex模式:
Pattern.compile("[g|G][r|R][a|A][n|N][t|T][ \t\n\x0B\f\r]+[i|I][n|N][s|S][e|E][r|R][t|T][ \t\n\x0B\f\r]*[,][ \t\n\x0B\f\r]*[u|U][p|P][d|D][a|A][t|T][e|E][ \t\n\x0B\f\r]*[,][ \t\n\x0B\f\r]*[d|D][e|E][l|L][e|E][t|T][e|E][ \t\n\x0B\f\r]+[o|O][n|N][ \t\n\x0B\f\r]+" + eodAppendedDbObjectName + "[ \t\n\x0B\f\r]+[t|T][o|O][ \t\n\x0B\f\r]+[g|G][r|R][o|O][u|U][p|P][ \t\n\x0B\f\r]+DACT_RW[ \t\n\x0B\f\r]*[,][g|G][r|R][o|O][u|U][p|P][ \t\n\x0B\f\r]+DACT_RW_BATCH1$");
但不知何故,即使我指定了正确的拨款,它也没有得到匹配。
你能指出上面的模式编译中出了什么问题吗?。或者建议在java中匹配模式的更好方法。
我将[ \t\n\x0B\f\r]
替换为\s
,从而简化了该语句,这就起到了作用。
public static void main(String [] args) {
String[] vals = {"grant insert,update,delete on ABC.TABLE_NAME to group DACT_RW, group DACT_RW_BATCH1"};
String eodAppendedDbObjectName = "ABC.TABLE_NAME";
Pattern p = Pattern.compile("[gG][rR][aA][nN][tT]\s+[iI][nN][sS][eE][rR][tT]\s*,\s*[uU][pP][dD][aA][tT][eE]\s*,\s*[dD][eE][lL][eE][tT][eE]\s+[oO][nN]\s+" + eodAppendedDbObjectName + "\s+[tT][oO]\s+[gG][rR][oO][uU][pP]\s+DACT_RW\s*,\s*[gG][rR][oO][uU][pP]\s+DACT_RW_BATCH1$");
for (String s : vals) {
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(s + " matches.");
} else {
System.out.println(s + " does not match.");
}
}
}