1 32 33 package websphinx; 34 35 49 public class Wildcard extends Regexp { 50 String stringRep; 51 52 public Wildcard (String pattern) { 53 super ("^" + toRegexp (pattern) + "$"); 54 stringRep = pattern; 55 } 56 57 public boolean equals (Object object) { 58 if (! (object instanceof Wildcard)) 59 return false; 60 Wildcard p = (Wildcard)object; 61 return p.stringRep.equals (stringRep); 62 } 63 64 public static String toRegexp (String wildcard) { 65 String s = wildcard; 66 67 int inAlternative = 0; 68 int inSet = 0; 69 boolean inEscape = false; 70 71 StringBuffer output = new StringBuffer (); 72 73 int len = s.length (); 74 for (int i=0; i<len; ++i) { 75 char c = s.charAt (i); 76 if (inEscape) { 77 output.append (c); 78 inEscape = false; 79 } 80 else { 81 switch (c) { 82 case '\\': 83 output.append (c); 84 inEscape = true; 85 break; 86 case '?': 87 output.append ('.'); 88 break; 89 case '*': 90 output.append (".*"); 91 break; 92 case '[': 93 output.append (c); 94 ++inSet; 95 break; 96 case ']': 97 output.append (c); 99 --inSet; 100 break; 101 case '{': 102 output.append ("(?:"); 103 ++inAlternative; 104 break; 105 case ',': 106 if (inAlternative > 0) 107 output.append ("|"); 108 else 109 output.append (c); 110 break; 111 case '}': 112 output.append (")"); 113 --inAlternative; 114 break; 115 case '^': 116 if (inSet > 0) { 117 output.append (c); 118 } 119 else { 120 output.append ('\\'); 121 output.append (c); 122 } 123 break; 124 case '$': 125 case '.': 126 case '|': 127 case '+': 128 output.append ('\\'); 129 output.append (c); 130 break; 131 default: 132 output.append (c); 133 break; 134 } 135 } 136 } 137 if (inEscape) 138 output.append ('\\'); 139 140 return output.toString (); 141 } 142 143 public static String escape (String s) { 144 return rcm.util.Str.escape (s, '\\', "\\?*{}()[]"); 145 } 146 147 public String toString () { 148 return stringRep; 149 } 150 151 public static void main (String [] args) throws Exception { 152 if (args.length < 2) { 153 System.err.println ("usage: Wildcard <pattern> <string>*"); 154 return; 155 } 156 157 Pattern p = new Wildcard (args[0].replace ('_', ' ') ); 158 for (int i=1; i<args.length; ++i) { 159 Region r = p.oneMatch (args[i]); 160 System.out.println (args[i] + ": " + (r != null)); 161 if (r != null) { 162 System.out.println (" [" + r.getStart() + "," + r.getEnd() + "]" + r); 163 Region[] groups = r.getFields ("websphinx.groups"); 164 if (groups != null) 165 for (int j=0; j<groups.length; ++j) { 166 Region s = groups[j]; 167 System.out.println (" "+"[" + s.getStart() + "," + s.getEnd() + "]" + s); 168 } 169 } 170 } 171 } 172 } 173 | Popular Tags |