Advertisement
MrPolywhirl

Regular Expression Match Groups

Nov 5th, 2013
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.85 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. public class App {
  5.  
  6.     public final char S = '(';
  7.     public final char E = ')';
  8.     public final char X = '\\';
  9.  
  10.     /**
  11.      * Actual Output:
  12.      *    Groups: [(//), (\d{1,2}), (\d{1,2}), (\d{2,4})]
  13.      * Expected Output:
  14.      *    Groups: [\\b((\\d{1,2})/(\\d{1,2})/(\\d{2,4}))\\b, ((\\d{1,2})/(\\d{1,2})/(\\d{2,4})), (\d{1,2}), (\d{1,2}), (\d{2,4})]
  15.      */
  16.    
  17.     public App() {
  18.         String expression = "\\b((\\d{1,2})/(\\d{1,2})/(\\d{2,4}))\\b";
  19.  
  20.         List<String> groups = findGroups(expression);
  21.  
  22.         System.out.println("Groups: " + groups);
  23.     }
  24.  
  25.     public List<String> findGroups(String expression) {
  26.         List<String> groups = new ArrayList<>();
  27.         int[] pos;
  28.         int start;
  29.         int end;
  30.         String sub;
  31.         boolean done = false;
  32.  
  33.         while (expression.length() > 0 && !done) {
  34.             pos = scanString(expression);
  35.             start = pos[0];
  36.             end = pos[1];
  37.            
  38.             if (start == -1 || end == -1) {
  39.                 done = true;
  40.                 continue;
  41.             }
  42.            
  43.             sub = expression.substring(start, end);
  44.             expression = splice(expression, start, end);
  45.             groups.add(0, sub);
  46.         }
  47.  
  48.         return groups;
  49.     }
  50.  
  51.     public String splice(String str, int start, int end) {
  52.         String first = str.substring(0, start);
  53.         String last = str.substring(end, str.length());
  54.         return first + last;
  55.     }
  56.  
  57.     public int[] scanString(String str) {
  58.         int[] range = new int[] { -1, -1 };
  59.         int min = 0;
  60.         int max = str.length() - 1;
  61.         int start = min;
  62.         int end = max;
  63.         char curr;
  64.  
  65.         while (start <= max) {
  66.             curr = str.charAt(start);
  67.             if (curr == S) {
  68.                 range[0] = start;
  69.             }
  70.             start++;
  71.         }
  72.  
  73.         end = range[0];
  74.  
  75.         while (end > -1 && end <= max) {
  76.             curr = str.charAt(end);
  77.             if (curr == E) {
  78.                 range[1] = end + 1;
  79.                 break;
  80.             }
  81.  
  82.             end++;
  83.         }
  84.  
  85.         return range;
  86.     }
  87.  
  88.     /**
  89.      * @param args
  90.      */
  91.     public static void main(String[] args) {
  92.         new App();
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement