×

Welcome to TagMyCode

Please login or create account to add a snippet.
1
0
 
1
Language: Java
Posted by: Shamir Yona
Added: Sep 12, 2015 5:31 AM
Modified: Sep 13, 2015 1:12 PM
Views: 10
Tags: no tags
  1. /**
  2.      * Simple RegEx compare, where the single supported RE chars are "." - single
  3.      * and "*" for multiple occurences.
  4.      * @param inpStr - Input string to be compared.
  5.      * @param reStr - Input RE.
  6.      * @return
  7.      */
  8.     static boolean regexCmp(String inpStr, String reStr)
  9.     {
  10.         boolean retVal = true;
  11.         int i, j; // Indexes in the input RegEx & String
  12.         char inpChar; // Current char from the input string/
  13.         char reChar; // Current RE's char.
  14.         char reCntChar; // contsind '1' - one occurence or "*" for multiple.
  15.         char reNextChar = '\0'; // For "*" - the next character, which follows the "*".
  16.         int inpStrLen = (inpStr == null) ? -1 : inpStr.length();
  17.         int reLen = (reStr == null) ? -1 : reStr.length();
  18.        
  19.         if (reLen <= 0 || inpStrLen <= 0)
  20.             return(false);
  21.        
  22.         i = j = 0;
  23.         // Scan the RE:
  24.         while (retVal && i < reLen)
  25.         {
  26.             // Determine what is the next RE char:
  27.             reChar = reStr.charAt(i++);
  28.             if (reChar == '*')
  29.                 throw new PatternSyntaxException("* without preceeding char", reStr, i);
  30.            
  31.             reCntChar = (i < reLen) ? reStr.charAt(i) : '1';
  32.             // For '*' - get the blocking char:
  33.             if (reCntChar == '*')
  34.             {
  35.                 i++; // Advance past '*'
  36.                 reNextChar = (i < reLen) ? reStr.charAt(i) : '\0';
  37.             }
  38.            
  39.             // Compare it to the current RE char:
  40.             boolean getNextReChar = false;
  41.             while (retVal && j < inpStrLen && !getNextReChar)
  42.             {
  43.                 // Get the next char from the input string:
  44.                 inpChar = inpStr.charAt(j++);
  45.  
  46.                 // If the current RE char is not '.' and it does not match
  47.                 // the current input character - nothing to do:
  48.                 if (reChar != '.' && inpChar != reChar)
  49.                 {
  50.                     retVal = false;
  51.                     break;
  52.                 }
  53.                 // Current input char matches:
  54.                 // If the Count RE char is not - '*' advance to the next RE.
  55.                 // Else if the next input character matches the first Char,
  56.                 // which is next to '*':
  57.                 if (reCntChar != '*')
  58.                     getNextReChar = true;
  59.                 else
  60.                 {
  61.                     // Check if the next input character matches the next
  62.                     // RE char, so leave the scan on the input string:
  63.                     if (reNextChar != '\0' && j < inpStrLen
  64.                         && inpStr.charAt(j) == reNextChar)
  65.                         getNextReChar = true;
  66.                 }
  67.  
  68.             }
  69.            
  70.         }
  71.         // Have we reached the end of the RE before the end
  72.         // of the input string?
  73.         if (retVal && i >= reLen && j < inpStrLen)
  74.             retVal = false;
  75.        
  76.        
  77.         return(retVal);
  78.     }
  79.