📄 likeopwrapper.java
字号:
/*------------------------------------------------------------------------------Name: LikeOpWrapper.javaProject: xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE file------------------------------------------------------------------------------*/package org.xmlBlaster.util.lexical;import gnu.regexp.RE;import gnu.regexp.REException;import java.util.StringTokenizer;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.util.Global;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.util.def.ErrorCode;/** * LikeOpWrapper * @author <a href="mailto:michele@laghi.eu">Michele Laghi</a> */public final class LikeOpWrapper { private static final String ME = "LikeOpWrapper"; private String regexPattern; private RE expression; private Global global; private static Logger log = Logger.getLogger(LikeOpWrapper.class.getName()); public LikeOpWrapper(Global global, String pattern) throws XmlBlasterException { this(global, pattern, (char)0); } public LikeOpWrapper(Global global, String pattern, char escape) throws XmlBlasterException { this(global, pattern, escape, true); }/* public LikeOpWrapper(Global global, String pattern, char escape, boolean doReducedSyntax) throws XmlBlasterException { this.global = global; String tmp = pattern; if (doReducedSyntax) { tmp = replace(tmp, escape, "_", "."); if (log.isLoggable(Level.FINE)) this.log.trace(ME, "constructor regexPattern (transitional)='" + tmp + "'"); tmp = replace(tmp, escape, "%", ".*"); if (log.isLoggable(Level.FINE)) this.log.trace(ME, "constructor regexPattern='" + this.regexPattern + "'"); } try { this.regexPattern = tmp; this.expression = new RE(tmp); } catch (REException ex) { if (log.isLoggable(Level.FINE)) this.log.trace(ME, "constructor " + Global.getStackTraceAsString()); throw new XmlBlasterException(this.global, ErrorCode.USER_ILLEGALARGUMENT, ME + " constructor: could not generate a Regex from the string '" + pattern + "' reason: " + ex.getMessage()); } }*/ public LikeOpWrapper(Global global, String pattern, char escape, boolean doReducedSyntax) throws XmlBlasterException { this.global = global; String tmp = pattern; if (doReducedSyntax) { StringBuffer buf = new StringBuffer(); boolean isEscape = false; for (int i=0; i < pattern.length(); i++) { char ch = pattern.charAt(i); switch (ch) { case '_' : if (isEscape) buf.append(ch); else buf.append('.'); isEscape = false; break; case '%' : if (isEscape) buf.append(ch); else buf.append('.').append('*'); isEscape = false; break; default: if (ch == escape) isEscape = true; else { isEscape = false; buf.append(ch); } } } tmp = buf.toString(); if (log.isLoggable(Level.FINE)) this.log.fine("constructor regexPattern='" + tmp + "'"); } try { this.regexPattern = tmp; this.expression = new RE(tmp); } catch (REException ex) { if (log.isLoggable(Level.FINE)) this.log.fine("constructor " + Global.getStackTraceAsString(ex)); throw new XmlBlasterException(this.global, ErrorCode.USER_ILLEGALARGUMENT, ME + " constructor: could not generate a Regex from the string '" + pattern + "' reason: " + ex.getMessage()); }} public boolean match(String inputString) { return this.expression.isMatch(inputString); } /** * * @param pattern The input String to modify (the initial pattern used) * @param escape The character to use as the escape char. If 0 then it works as no escape was defined * @param token the token to be replaced * @param replacement the string to use to replace the given token. * @return */ public static String replace(String pattern, char escape, String token, String replacement) { StringTokenizer tokenizer = new StringTokenizer(pattern, token); StringBuffer buf = new StringBuffer(); while (tokenizer.hasMoreTokens()) { String tmp = tokenizer.nextToken(); buf.append(tmp); if (tokenizer.hasMoreTokens()) { if (tmp.charAt(tmp.length()-1) == escape) { buf.append(token); } else { buf.append(replacement); } } } return buf.toString(); } public static void main(String[] args) { if (args.length != 2) { System.err.println("usage: java org.xmlBlaster.util.lexical.LikeOpWrapper pattern inputString"); System.exit(-1); } try { LikeOpWrapper wrapper = new LikeOpWrapper(new Global((String[])null), args[0], (char)0, false); System.out.println("result: " + wrapper.match(args[1])); } catch (Exception ex) { ex.printStackTrace(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -