blob: 3312c9f32c057d6359647ef26871bb8a7db319ad [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 Standards for Technology in Automotive Retail and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Carver - bug 262765 - initial API and implementation
* Mukul Gandhi - bug 280798 - PsychoPath support for JDK 1.4
*******************************************************************************/
package org.eclipse.wst.xml.xpath2.processor.internal.function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.wst.xml.xpath2.processor.internal.types.QName;
public abstract class AbstractRegExFunction extends Function {
protected static final String validflags = "smix";
public AbstractRegExFunction(QName name, int arity) {
super(name, arity);
}
public AbstractRegExFunction(QName name, int min_arity, int max_arity) {
super(name, min_arity, max_arity);
}
protected static boolean matches(String pattern, String flags, String src) {
boolean fnd = false;
if (pattern.indexOf("-[") != -1) {
pattern = pattern.replaceAll("\\-\\[", "&&[^");
}
Matcher m = compileAndExecute(pattern, flags, src);
while (m.find()) {
fnd = true;
}
return fnd;
}
protected static Matcher regex(String pattern, String flags, String src) {
Matcher matcher = compileAndExecute(pattern, flags, src);
return matcher;
}
private static Matcher compileAndExecute(String pattern, String flags, String src) {
int flag = Pattern.UNIX_LINES;
if (flags != null) {
if (flags.indexOf("m") >= 0) {
flag = flag | Pattern.MULTILINE;
}
if (flags.indexOf("s") >= 0) {
flag = flag | Pattern.DOTALL;
}
if (flags.indexOf("i") >= 0) {
flag = flag | Pattern.CASE_INSENSITIVE;
}
if (flags.indexOf("x") >= 0) {
flag = flag | Pattern.COMMENTS;
}
}
Pattern p = Pattern.compile(pattern, flag);
return p.matcher(src);
}
}