net.sf.mmm.util.pattern.base.RegexInfixPatternCompiler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mmm-util-pattern Show documentation
Show all versions of mmm-util-pattern Show documentation
provides pattern matching abstraction to flexibly choose between regex and glob.
The newest version!
/* Copyright (c) The m-m-m Team, Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/LICENSE-2.0 */
package net.sf.mmm.util.pattern.base;
import java.util.regex.Pattern;
import net.sf.mmm.util.pattern.api.PatternCompiler;
/**
* This implementation of the {@link PatternCompiler} interface compiles the {@code pattern} given as string in a way
* similar to GNU-utilities like {@code sed} or {@code grep}. This means that if no leading "^" (or ".*") or no trailing
* "$" (or ".*") is present, an according ".*" prefix and suffix is added implicit. This causes that "\.xml$" matches
* "config.xml" and "^/etc/" matches "/etc/passwd".
* ATTENTION:
* On the {@link Pattern#matcher(CharSequence) matcher} of the produced {@link Pattern} you may want to use
* {@link java.util.regex.Matcher#find()} instead of {@link java.util.regex.Matcher#matches()}.
*
* @author Joerg Hohwiller (hohwille at users.sourceforge.net)
* @since 1.0.0
*/
public class RegexInfixPatternCompiler extends RegexPatternCompiler {
/** A singleton instance of this implementation. */
public static final PatternCompiler INSTANCE = new RegexInfixPatternCompiler();
/**
* The constructor.
*/
public RegexInfixPatternCompiler() {
super();
}
/**
* The constructor.
*
* @param flags are the {@link Pattern#compile(String, int) compiler flags}.
*/
public RegexInfixPatternCompiler(int flags) {
super(flags);
}
@Override
public Pattern compile(String pattern) throws IllegalArgumentException {
StringBuilder buffer = new StringBuilder(pattern.length() + 4);
if (!pattern.startsWith("^") && !pattern.startsWith(".*")) {
buffer.append(".*");
}
buffer.append(pattern);
if (!pattern.endsWith("$") && !pattern.endsWith(".*")) {
buffer.append(".*");
}
return super.compile(buffer.toString());
}
}