import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?mnxs-i)\n"
+ "^\n"
+ "(?!$)\n"
+ "(?<Thousands>\n"
+ " M{0,3}\n"
+ ")\n"
+ "(?<Hundreds>\n"
+ " (\n"
+ " (C(M|D))\n"
+ " (?!C)\n"
+ " |\n"
+ " D\n"
+ " )?\n"
+ " C{0,3}\n"
+ ")\n"
+ "(?<Tens>\n"
+ " (\n"
+ " (X(C|L))\n"
+ " (?!X)\n"
+ " |\n"
+ " L\n"
+ " )?\n"
+ " X{0,3}\n"
+ ")\n"
+ "(?<Ones>\n"
+ " (\n"
+ " (I(X|V))\n"
+ " (?!I)\n"
+ " |\n"
+ " V\n"
+ " )?\n"
+ " I{0,3}\n"
+ ")\n"
+ "$";
final String string = "MMMDCCCLXXXVIII\n"
+ "MMMCDXLIV\n\n"
+ "50 Valid\n"
+ "I\n"
+ "MMMCMXCIX\n"
+ "MMDCLXXIV\n"
+ "MCDXCIX\n"
+ "CCCXVIII\n"
+ "XCII\n"
+ "MMMLXXXIV\n"
+ "MMMCMLIII\n"
+ "DCCXXX\n"
+ "DCXCV\n"
+ "CCXCV\n"
+ "MMDCLX\n"
+ "MDCCLXXVI\n"
+ "CDXLV\n"
+ "MMMCDXLII\n"
+ "CMXXI\n"
+ "MDCCCXC\n"
+ "MMCCCXLVII\n"
+ "MCMXXXVIII\n"
+ "CDXCII\n"
+ "MMMCMXXII\n"
+ "DCXLVIII\n"
+ "MCDLVI\n"
+ "DCCLXXXIX\n"
+ "MMXIV\n"
+ "MCMXC\n"
+ "CCCLXXI\n"
+ "MDCCCXXI\n"
+ "MMCMLIV\n"
+ "MDCXVI\n"
+ "MMCMXLV\n"
+ "MCDLXXIX\n"
+ "DCCCXIII\n"
+ "CCXLVII\n"
+ "MDCCCXCV\n"
+ "MMCMLXXXVIII\n"
+ "CDLX\n"
+ "MMCDLIII\n"
+ "CMXLV\n"
+ "DCCXXII\n"
+ "MMMDCCL\n"
+ "CDXXVIII\n"
+ "MMDXLII\n"
+ "DCCCXCIX\n"
+ "MMXLI\n"
+ "CMXLIX\n"
+ "MCDXXXIX\n\n"
+ "50 Invalid\n"
+ "IIII\n"
+ "VV\n"
+ "LL\n"
+ "DD\n"
+ "XXXX\n"
+ "CCCC\n"
+ "MMMM\n"
+ "IIV\n"
+ "IIIV\n"
+ "VX\n"
+ "VL\n"
+ "VC\n"
+ "XD\n"
+ "XM\n"
+ "IL\n"
+ "IC\n"
+ "ID\n"
+ "IM\n"
+ "MCMC\n"
+ "IXX\n"
+ "XCC\n"
+ "IIC\n"
+ "CDM\n"
+ "CDC\n"
+ "MIM\n"
+ "IXL\n"
+ "ILX\n"
+ "ICX\n"
+ "IICM\n"
+ "IIIC\n"
+ "IIIM\n"
+ "XIC\n"
+ "XIXX\n"
+ "XIXC\n"
+ "IXXC\n"
+ "CMCM\n"
+ "CDCD\n"
+ "XCXC\n"
+ "XLXL\n"
+ "MDCM\n"
+ "DCD\n"
+ "IXXL\n"
+ "XLC\n"
+ "VIX\n"
+ "VID\n"
+ "VIL\n"
+ "IIVX\n"
+ "IVXL\n"
+ "MXLIVC\n"
+ "CXM\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.COMMENTS | Pattern.DOTALL);
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