Mega Code Archive

 
Categories / Java / Regular Expressions
 

Match SQL string

/*   *   * The ObjectStyle Group Software License, version 1.1  * ObjectStyle Group - http://objectstyle.org/  *   * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors  * of the software. All rights reserved.  *   * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *   * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  *   * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in  *    the documentation and/or other materials provided with the  *    distribution.  *   * 3. The end-user documentation included with the redistribution, if any,  *    must include the following acknowlegement:  *    "This product includes software developed by independent contributors  *    and hosted on ObjectStyle Group web site (http://objectstyle.org/)."  *    Alternately, this acknowlegement may appear in the software itself,  *    if and wherever such third-party acknowlegements normally appear.  *   * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse  *    or promote products derived from this software without prior written  *    permission. For written permission, email  *    "andrus at objectstyle dot org".  *   * 5. Products derived from this software may not be called "ObjectStyle"  *    or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their  *    names without prior written permission.  *   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  * SUCH DAMAGE.  *   *   * This software consists of voluntary contributions made by many  * individuals and hosted on ObjectStyle Group web site.  For more  * information on the ObjectStyle Group, please see  * <http://objectstyle.org/>.  */ import java.util.regex.Matcher; import java.util.regex.Pattern; /**  * A collection of utility methods related to regular expressions processing.  *   * @since 1.2  * @author Andrus Adamchik  */ class RegexUtil {     static final Pattern BACKSLASH = Pattern.compile("\\\\");     static final Pattern DOT = Pattern.compile("\\.");     /**      * Replaces all backslashes "\" with forward slashes "/". Convenience method to      * convert path Strings to URI format.      */     static String substBackslashes(String string) {         if (string == null) {             return null;         }         Matcher matcher = BACKSLASH.matcher(string);         return matcher.find() ? matcher.replaceAll("\\/") : string;     }     /**      * Returns package name for the Java class as a path separated with forward slash      * ("/"). Method is used to lookup resources that are located in package      * subdirectories. For example, a String "a/b/c" will be returned for class name      * "a.b.c.ClassName".      */     static String getPackagePath(String className) {         if (className == null) {             return "";         }         Matcher matcher = DOT.matcher(className);         if (matcher.find()) {             String path = matcher.replaceAll("\\/");             return path.substring(0, path.lastIndexOf("/"));         }         else {             return "";         }     }     /**      * Converts a SQL-style pattern to a valid Perl regular expression. E.g.:      * <p>      * <code>"billing_%"</code> will become <code>^billing_.*$</code>      * <p>      * <code>"user?"</code> will become <code>^user.?$</code>      */     static String sqlPatternToRegex(String pattern) {         if (pattern == null) {             throw new NullPointerException("Null pattern.");         }         if (pattern.length() == 0) {             throw new IllegalArgumentException("Empty pattern.");         }         StringBuffer buffer = new StringBuffer();         // convert * into regex syntax         // e.g. abc*x becomes ^abc.*x$         // or abc?x becomes ^abc.?x$         buffer.append("^");         for (int j = 0; j < pattern.length(); j++) {             char nextChar = pattern.charAt(j);             if (nextChar == '%') {                 nextChar = '*';             }             if (nextChar == '*' || nextChar == '?') {                 buffer.append('.');             }             // escape special chars             else if (nextChar == '.'                     || nextChar == '/'                     || nextChar == '$'                     || nextChar == '^') {                 buffer.append('\\');             }             buffer.append(nextChar);         }         buffer.append("$");         return buffer.toString();     }     private RegexUtil() {         super();     } }