fork(1) download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4. import java.util.regex.*;
  5. class Ideone
  6. {
  7. public static void main (String[] args) throws java.lang.Exception
  8. {
  9. //System.out.println(rightPad("PERMISSION", 35) + rightPad("PERMISSION EXPRESSION", 35) + "RESULT");
  10.  
  11. // ALL TRUE
  12. magicFunction( "A.B.C", "A.B.C.D");
  13. magicFunction( "A.B.C.D", "A.B.C.D");
  14. magicFunction( "A.B.C.D", "A.B.*");
  15. magicFunction( "A.B.C.D", "A.B.?.D");
  16. magicFunction( "A.B.C.D", "A.B.C.[D,E,F]");
  17. magicFunction( "A.B.C.E", "A.B.C.[D,E,F]");
  18. magicFunction( "A.B.C.F", "A.<A,C>.C.[D,E,F]");
  19. magicFunction( "A.B.C.D", "A.B.C.<A,B,C>");
  20. magicFunction( "A.B.C.E", "A.B.C.<A,B,C>");
  21. magicFunction( "A.B.C.F", "A.[B].C.<A,B,C>");
  22.  
  23. System.out.println();
  24.  
  25. // ALL FALSE
  26. magicFunction( "A.B.C", "A.B");
  27. magicFunction( "A.B.C.D", "A.B.?.E");
  28. magicFunction( "A.B.C.D", "A.D.*");
  29. magicFunction( "A.B.C.D", "A.B.?");
  30. magicFunction( "A.B.C.Q", "A.?.C.[D,E,F]");
  31. magicFunction( "A.B.C.W", "A.?.C.[D,E,F]");
  32. magicFunction( "A.B.C.E", "A.<B,D,E>.?.[D,E,F]");
  33. magicFunction( "A.B.C.A", "A.B.C.<A,B,C>");
  34. magicFunction( "A.B.C.B", "A.B.C.<A,B,C>");
  35. magicFunction( "A.B.C.C", "A.[D].C.<A,B,C>");
  36. }
  37. public static boolean magicFunction(String permission, String permissionExpression) {
  38. return magicFunctionImplementation(permission, permissionExpression);
  39. }
  40.  
  41. public static boolean magicFunctionImplementation(String permission, String permissionExpression) {
  42. boolean res = false;
  43. String rx = permissionExpression.replace(".", "\\.")
  44. .replace("*", ".*")
  45. .replace("?", ".")
  46. .replaceAll("\\[([^\\]\\[]*)]", "($1)")
  47. .replaceAll("<([^<>]+)>", "(?:(?!$1)[^.])*")
  48. .replace(",", "|");
  49. System.out.println(rx);
  50. if (permissionExpression.contains(permission)) {
  51. res = true;
  52. } else {
  53. res = permission.matches(rx);
  54. }
  55. System.out.println(res);
  56. return res;
  57. }
  58.  
  59. }
Success #stdin #stdout 0.06s 320576KB
stdin
Standard input is empty
stdout
A\.B\.C\.D
true
A\.B\.C\.D
true
A\.B\..*
true
A\.B\..\.D
true
A\.B\.C\.(D|E|F)
true
A\.B\.C\.(D|E|F)
true
A\.(?:(?!A|C)[^.])*\.C\.(D|E|F)
true
A\.B\.C\.(?:(?!A|B|C)[^.])*
true
A\.B\.C\.(?:(?!A|B|C)[^.])*
true
A\.(B)\.C\.(?:(?!A|B|C)[^.])*
true

A\.B
false
A\.B\..\.E
false
A\.D\..*
false
A\.B\..
false
A\..\.C\.(D|E|F)
false
A\..\.C\.(D|E|F)
false
A\.(?:(?!B|D|E)[^.])*\..\.(D|E|F)
false
A\.B\.C\.(?:(?!A|B|C)[^.])*
false
A\.B\.C\.(?:(?!A|B|C)[^.])*
false
A\.(D)\.C\.(?:(?!A|B|C)[^.])*
false