2012-08-31 28 views
1

對於DB2示例授予如下所示。使用模式和匹配器類的java中的模式匹配授權語句

grant insert,update,delete on ABC.TABLE_NAME to group DACT_RW, group DACT_RW_BATCH1 

我想使用類似建立一個正則表達式模式:

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中的模式。

+2

如果使用Pattern.compile(patternStr,Pattern.CASE_INSENSITIVE)你並不需要檢查所有大寫/小寫組合和你的模式變得不那麼複雜 –

+2

'[G | G]'匹配一個'g','''',''G'(是的,也是''''char!)。在角色類中,「正常」元字符沒有「特殊權力」。 –

+0

@ Stefan Neubert: 我瞭解Pattern.CASE_INSENSITIVE選項。但是我不能用它來匹配我的模式,因爲聲明中的幾個詞是區分大小寫的。 – user1587504

回答

0

我通過用\\s代替[ \\t\\n\\x0B\\f\\r]簡化了聲明,這個工作。

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."); 
     } 
    } 
} 
+1

完成/更新CASE_INSENSITIVE –

+0

確實它非常簡單!它工作:)謝謝, – user1587504