RegexTools.java
package eu.javaexperience.regex;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import eu.javaexperience.reflect.Mirror;
public class RegexTools
{
public static final Pattern MATCH_WHITESPACES = Pattern.compile("\\s+");
public static final Pattern ZERO_TO_Z = Pattern.compile("[0-9a-zA-Z]+");
public static final Pattern TAB = Pattern.compile("\t");
public static final Pattern DASHES = Pattern.compile("-+");
public static final Pattern SPACES = Pattern.compile(" +");
public static final Pattern DOT = Pattern.compile("\\.");
public static final Pattern COMMA = Pattern.compile(",");
public static final Pattern COLON = Pattern.compile(":");
public static final Pattern HEADER_LINES = Pattern.compile(" *: *");
public static final Pattern QUESTION_MARK = Pattern.compile("\\?");
public static final Pattern SLASHES = Pattern.compile("/+");
public static final Pattern SLASHES_LINUX_WINDOWS = Pattern.compile("[/\\\\]+");
public static final Pattern CONTROL_CHARACTER = Pattern.compile("\\p{Cntrl}");
public static final Pattern C_VARIABLE_NAME = Pattern.compile("^[a-zA-Z_$][a-zA-Z_$0-9]*$");
public static final Pattern LINUX_NEW_LINE = Pattern.compile("\n");
public static String getNamedGroupOrDefault(String source,Pattern pat, String group, String def)
{
if(source == null)
return null;
Matcher m = pat.matcher(source);
if(m.find())
return m.group(group);
return def;
}
private static final Pattern ngf = Pattern.compile("\\?<(\\w+)>");
public static String[] getNamedGroupNames(String regex)
{
ArrayList<String> ret = new ArrayList<String>();
Matcher m = ngf.matcher(regex);
while(m.find())
ret.add(m.group(1));
return ret.toArray(Mirror.emptyStringArray);
}
/**
* Visszaadja a forrásban található groupName csoport értéket, amit a regex megtalál.
* Ha megtalálta begyűjti, majd a megtalált szöveget kivágja. és még egyszer keres
*
* source: "method(param0,num,base)";
* regex: "\\w*(((?<arg>\\*w),*))$";
* groupName: arg
* eremény: "param0","num","base"
* */
public static String[] getNamedGroups(String source,Pattern regex,String groupName,int limit)
{
String[] ret = new String[limit];
int ep = 0;
for(int i=0;i<limit;i++)
{
Matcher m = regex.matcher(source);
if(!m.find())
break;
ret[ep++] = m.group(groupName);
}
return Arrays.copyOf(ret, ep);
}
public static Map<String,String> collectNamedGroups(String source,Pattern regex)
{
return collectNamedGroups(source, regex, getNamedGroupNames(regex.toString()));
}
public static Map<String,String> collectNamedGroups(String source,Pattern regex,String... groups)
{
Map<String,String> ret = new HashMap<>();
Matcher m = regex.matcher(source);
if(m.matches())
for(String s:groups)
ret.put(s,m.group(s));
return ret;
}
public static String quoteRegex(String regex)
{
return Pattern.quote(regex);
}
public static Pattern captureStrings(String... words)
{
StringBuilder sb = new StringBuilder();
sb.append("(");
for(int i=0;i<words.length;++i)
{
if(sb.length() > 1)
{
sb.append("|");
}
sb.append(RegexTools.quoteRegex(words[i]));
}
sb.append(")");
return Pattern.compile(sb.toString());
}
public static String findNamedRegexGroup(String subject, Pattern pattern, String grpName)
{
Matcher m = pattern.matcher(subject);
if(m.find())
{
return m.group(grpName);
}
return null;
}
}