What does the regex represent? A filename? If so, then maybe the code belongs in IO rather than Lang.
Also, filename globbing is not consistent across OSes. On 8 October 2010 15:32, Stephen Colebourne <[email protected]> wrote: > Human users enter wildcards * and ? (because regex is too complex). In > my case, I'm passing it to MongoDB, which needs regex. > > Stephen > > > On 8 October 2010 15:10, Paul Benedict <[email protected]> wrote: >> Can I get some sense of use case? What would you use it for? Just curious. >> >> On Fri, Oct 8, 2010 at 9:06 AM, Stephen Colebourne <[email protected]> >> wrote: >>> I don't think comons lang has a routine for converting a standard >>> wildcard string (with * and ?) to a regex. >>> Here is a first suggestion, although I'm sure it can be improved. >>> >>> public Pattern createPattern(String text) { >>> StringTokenizer tkn = new StringTokenizer(text, "?*", true); >>> StringBuilder buf = new StringBuilder(text.length() + 10); >>> buf.append('^'); >>> boolean lastStar = false; >>> while (tkn.hasMoreTokens()) { >>> String str = tkn.nextToken(); >>> if (str.equals("?")) { >>> buf.append('.'); >>> lastStar = false; >>> } else if (str.equals("*")) { >>> if (lastStar == false) { >>> buf.append(".*"); >>> } >>> lastStar = true; >>> } else { >>> buf.append(Pattern.quote(str)); >>> lastStar = false; >>> } >>> } >>> buf.append('$'); >>> return Pattern.compile(buf.toString(), Pattern.CASE_INSENSITIVE); >>> } >>> >>> Other possile conversions would be * and ? to databse wildcards, so >>> perhaps there is scope for a few related methods here? >>> >>> Stephen >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
