import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?(DEFINE)\n"
+ " (?<currency_symbol> \\p{Sc} )\n"
+ " (?<leading_group> [1-9] \\d{0,2}+ )\n"
+ " (?<group> \\d{3} )\n"
+ " (?<non_leading_groups> (?&group) (?:(?&group_delim)(?&group))*+ )\n"
+ " (?<decimal_delim>\n"
+ " (?# Use the opposite of group_delim. )\n"
+ " (?(group_delim_comma)\n"
+ " \\.\n"
+ " | (?(group_delim_period)\n"
+ " ,\n"
+ " | [,.] (?# There's no definitive grouping_delim. )\n"
+ " )\n"
+ " )\n"
+ " )\n"
+ ")\n\n"
+ "^\n"
+ "(?>\n"
+ " (?¤cy_symbol)\n"
+ " (?&leading_group)\n"
+ " (?:\n"
+ " (?<group_delim>\n"
+ " (?<group_delim_comma> , ) |\n"
+ " (?<group_delim_period> \\. ) |\n"
+ " \\ (?# Allow whitespace as a delimiter. )\n"
+ " )\n"
+ " (?&non_leading_groups)\n"
+ " | \\d*+ (?# It's also possible that there's no delimiter. )\n"
+ " )\n"
+ ")\n"
+ "(?:\n"
+ " (?&decimal_delim)\n"
+ " \\d*+\n"
+ ")?+\n"
+ "$";
final String string = "We want to match these:\n"
+ "$1\n"
+ "$10\n"
+ "$100\n"
+ "$1000\n"
+ "$1,000\n"
+ "$10,000\n"
+ "$100,000\n"
+ "$1,000,000\n"
+ "$1.00\n"
+ "$100.00\n"
+ "$10,000.00\n"
+ "$1,000,000.00\n"
+ "$1.000.000,00\n"
+ "$1.000\n"
+ "$1.000.000\n"
+ "$1,00\n"
+ "$1.000,00\n"
+ "$10000000000000\n\n"
+ "We don't want to match these:\n"
+ "$1,000,00\n"
+ "$1,00,00\n"
+ "$1.00.000\n\n"
+ "A few different currency symbols that we want to match:\n"
+ "$1\n"
+ "¢1\n"
+ "£1\n"
+ "¤1\n"
+ "¥1\n"
+ "₠1\n"
+ "₡1\n"
+ "₢1\n"
+ "₣1\n"
+ "₤1\n"
+ "₥1\n"
+ "₦1\n"
+ "₧1\n"
+ "₩1\n"
+ "₪1\n"
+ "₫1\n"
+ "€1\n"
+ "₭1\n"
+ "₮1\n"
+ "₯1\n"
+ "₰1\n"
+ "₱1\n"
+ "₲1\n"
+ "₳1\n"
+ "₴1\n"
+ "₵1\n"
+ "₶1\n"
+ "₷1\n"
+ "₸1\n"
+ "₹1\n"
+ "₺1\n"
+ "₻1\n"
+ "₼1\n"
+ "₽1\n\n"
+ "Nearby symbols that share some bytes (UTF-8) that we don't want to match:\n"
+ "¡1\n"
+ "¦1\n"
+ "§1\n"
+ "©1\n"
+ "ₔ1";
final Pattern pattern = Pattern.compile(regex, Pattern.UNICODE_CASE | Pattern.COMMENTS | Pattern.MULTILINE);
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