All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.groupbyinc.common.jregex.WildcardPattern Maven / Gradle / Ivy

There is a newer version: 198
Show newest version
/**
 * Copyright (c) 2001, Sergey A. Samokhodkin
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * - Redistributions of source code must retain the above copyright notice, 
 * this list of conditions and the following disclaimer. 
 * - 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.
 * - Neither the name of jregex nor the names of its contributors may be used 
 * to endorse or promote products derived from this software without specific prior 
 * written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS 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 REGENTS OR 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.
 * 
 * @version 1.2_01
 */

package jregex;

/**
 * A Pattern subclass that accepts a simplified pattern syntax:
 * 
  • ? - matches any single character; *
  • * - matches any number of any characters; *
  • all the rest - matches itself. * Each wildcard takes a capturing group withing a pattern. * * @see Pattern */ public class WildcardPattern extends Pattern{ //a wildcard class, see WildcardPattern(String,String,int) public static final String WORD_CHAR="\\w"; //a wildcard class, see WildcardPattern(String,String,int) public static final String ANY_CHAR="."; private static final String defaultSpecials="[]().{}+|^$\\"; private static final String defaultWcClass=ANY_CHAR; protected static String convertSpecials(String s,String wcClass,String specials){ int len=s.length(); StringBuffer sb=new StringBuffer(); for(int i=0;i=0) sb.append('\\'); sb.append(c); } } return sb.toString(); } private String str; /** * @param wc The pattern */ public WildcardPattern(String wc){ this(wc,true); } /** * @param wc The pattern * @param icase If true, the pattern is case-insensitive. */ public WildcardPattern(String wc,boolean icase){ this(wc,icase? DEFAULT|IGNORE_CASE: DEFAULT); } /** * @param wc The pattern * @param flags The bitwise OR of any of REFlags.* . The only meaningful * flags are REFlags.IGNORE_CASE and REFlags.DOTALL (the latter allows * the wildcards to match the EOL characters). */ public WildcardPattern(String wc,int flags){ compile(wc,defaultWcClass,defaultSpecials,flags); } /** * @param wc The pattern * @param wcClass The wildcard class, could be any of WORD_CHAR or ANY_CHAR * @param flags The bitwise OR of any of REFlags.* . The only meaningful * flags are REFlags.IGNORE_CASE and REFlags.DOTALL (the latter allows * the wildcards to match the EOL characters). */ public WildcardPattern(String wc,String wcClass,int flags){ compile(wc,wcClass,defaultSpecials,flags); } protected WildcardPattern(){} protected void compile(String wc,String wcClass,String specials,int flags){ String converted=convertSpecials(wc,wcClass,specials); try{ compile(converted,flags); } catch(PatternSyntaxException e){ //something unexpected throw new Error(e.getMessage()+"; original expr: "+wc+", converted: "+converted); } str=wc; } public String toString(){ return str; } /* public static void main(String[] args){ Pattern p=new WildcardPattern("*.???"); Matcher m=p.matcher("abc.def"); //System.out.println(p.toString_d()); while(m.proceed()){ System.out.println(m); System.out.println("groups: "+m.groupv()); } } */ }