使用Pattern&Matcher类在java中使用模式匹配grant语句(Pattern matching grant statement in java using Pattern & Match

编程入门 行业动态 更新时间:2024-10-05 09:22:36
使用Pattern&Matcher类在java中使用模式匹配grant语句(Pattern matching grant statement in java using Pattern & Matcher class)

对于DB2示例,授权如下所示。

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

For a DB2 example grant would look like below.

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

I am trying to build a regex pattern using something like:

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$");

But somehow, even if I specify correct grants, it is not getting matched.

Could you suggest what's wrong in above pattern compilation?. OR suggest better way to match the pattern in java.

最满意答案

我通过用[ \\t\\n\\x0B\\f\\r]替换[ \\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."); } } }

I simplified the statement by replacing [ \\t\\n\\x0B\\f\\r] with \\s and this works.

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

更多推荐

本文发布于:2023-08-07 17:47:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465235.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   模式   java   Matcher   Pattern

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!