001 /* 002 * Cobertura - http://cobertura.sourceforge.net/ 003 * 004 * Copyright (C) 2005 Mark Doliner 005 * Copyright (C) 2006 John Lewis 006 * 007 * Note: This file is dual licensed under the GPL and the Apache 008 * Source License (so that it can be used from both the main 009 * Cobertura classes and the ant tasks). 010 * 011 * Cobertura is free software; you can redistribute it and/or modify 012 * it under the terms of the GNU General Public License as published 013 * by the Free Software Foundation; either version 2 of the License, 014 * or (at your option) any later version. 015 * 016 * Cobertura is distributed in the hope that it will be useful, but 017 * WITHOUT ANY WARRANTY; without even the implied warranty of 018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 019 * General Public License for more details. 020 * 021 * You should have received a copy of the GNU General Public License 022 * along with Cobertura; if not, write to the Free Software 023 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 024 * USA 025 */ 026 027 package net.sourceforge.cobertura.util; 028 029 import java.util.Collection; 030 import java.util.Iterator; 031 032 import org.apache.log4j.Logger; 033 import org.apache.oro.text.regex.MalformedPatternException; 034 import org.apache.oro.text.regex.Pattern; 035 import org.apache.oro.text.regex.Perl5Compiler; 036 import org.apache.oro.text.regex.Perl5Matcher; 037 038 /** 039 * Abstract, not to be instantiated utility class for Regex functions. 040 * 041 * @author John Lewis (logic copied from MethodInstrumenter) 042 */ 043 public abstract class RegexUtil 044 { 045 046 private static final Logger logger = Logger.getLogger(RegexUtil.class); 047 048 private final static Perl5Matcher pm = new Perl5Matcher(); 049 050 /** 051 * <p> 052 * Check to see if one of the regular expressions in a collection match 053 * an input string. 054 * </p> 055 * 056 * @param regexs The collection of regular expressions. 057 * @param str The string to check for a match. 058 * @return True if a match is found. 059 */ 060 public static boolean matches(Collection regexs, String str) 061 { 062 Iterator iter = regexs.iterator(); 063 while (iter.hasNext()) 064 { 065 Pattern regex = (Pattern)iter.next(); 066 if (pm.matches(str, regex)) 067 { 068 return true; 069 } 070 } 071 072 return false; 073 } 074 075 public static void addRegex(Collection list, String regex) 076 { 077 try 078 { 079 Perl5Compiler pc = new Perl5Compiler(); 080 Pattern pattern = pc.compile(regex); 081 list.add(pattern); 082 } 083 catch (MalformedPatternException e) 084 { 085 logger.warn("The regular expression " + regex + " is invalid: " 086 + e.getLocalizedMessage()); 087 } 088 } 089 090 }