<%@ page language="java" import="java.util.regex.*" %><%! /*_____________________________________________________________________________________ include this file if revize.jar does not have RegEx class %@ include file="/util/RegEx.class.jsp" %> NOTE: This is RegEx.java except results method is NOT static in Regex.jsp _____________________________________________________________________________________*/ /** * Simulate JavaScript regular expression logic * @author daveotto * */ public class RegEx { /** * Backward compatibility * @param searchStr * @param patternInput * @return String[] of all matches if global otherwise all groups */ public String[] results (String searchStr, String patternInput) { RegEx regEx = new RegEx(); Results r = regEx.match(searchStr, patternInput); return r.group; } /** * Class returned match with JavaScript properties * group[n] contains contents of the nth parathensis group (...) * lastIndex not implemented because NA on Firefox and IE9+ */ public class Results { public int index = 0; public int length = 0; public Pattern pattern = null; public String[] group = new String[0]; public String msg = ""; } /** * Simulate JavaScript regex match function * @param searchStr * @param patternInput * @return Results class */ public Results match (String searchStr, String patternInput) { String patternStr = patternInput; int flags = 0; boolean isGlobal = false; Pattern pattern = null; Matcher matcher = null; Results results = new Results(); // convert from JavaScript syntax to java int offset = patternStr.lastIndexOf("/"); if (offset > 0 && patternStr.startsWith("/")) { String flagStr = patternStr.substring(offset+1).toLowerCase(); if (flagStr.indexOf("i") != -1) flags += Pattern.CASE_INSENSITIVE; if (flagStr.indexOf("m") != -1) flags += java.util.regex.Pattern.MULTILINE; if (flagStr.indexOf("g") != -1) isGlobal = true; patternStr = patternStr.substring(1, offset); } try { pattern = Pattern.compile(patternStr,flags); results.pattern = pattern; matcher = pattern.matcher(searchStr); } catch(Exception e) { results.msg = e.getMessage() + "\nPattern: " + patternInput; return results; } if (isGlobal) { List matches = new ArrayList(); while (matcher.find()) { results.index = matcher.start(); matches.add(searchStr.substring(matcher.start(), matcher.end())); } results.group = (String[]) matches.toArray(new String[0]); results.length = results.group.length; } else { int count = matcher.groupCount()+1; results.length = count; results.group = new String[count]; if (matcher.find()) { results.index = matcher.start(0); results.group[0] = searchStr.substring(matcher.start(0), matcher.end(0)); for (int i=1;i