import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?(DEFINE)\n"
+ " (?<decimal>(?(int)([.][0-9]+)?|[.][0-9]+))\n"
+ " (?<percentage>\n"
+ " (100|\n"
+ " (?<int>([0-9]|[1-9][0-9]))? # Have integer be optional (0-100 only)\n"
+ " (?P>decimal) # Have decimal required when an integer is not included\n"
+ " )\n"
+ " (?<symbol>%)\n"
+ " )\n"
+ " (?<hue> \n"
+ " (?<int>36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])? # Have integer be optional\n"
+ " (?P>decimal) # Have decimal required when an integer is not included\n"
+ " (?<symbol>\\s*deg\\s*)?\n"
+ " )\n"
+ " (?<alpha>\n"
+ " (?(alpha),\\s*(\n"
+ " 1[.]0|\n"
+ " (?<int>0)? # Have integer be optional\n"
+ " (?P>decimal) # Have decimal required when integer is not incldue\n"
+ " )\\s*)\n"
+ " )\n"
+ " (?<hsl>\\s*(?P>hue)\\s*,\\s*(?P>percentage)\\s*,\\s*(?P>percentage)\\s*)\n"
+ ")\n"
+ "hsl(?<alpha>a)?\\((?P>hsl)(?P>alpha)\\)";
final String string = "hsl(10, 50deg, 150%)\n"
+ "HSLA(50.35, .531, 10%)\n"
+ "HSLA(50.5deg, .531%, .9%, 1.0)";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html