import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "# Start defining\n"
+ "(?(DEFINE)\n"
+ " (?<XSEP>\\s*[xх\\*\\-\\s]?\\s*)\n"
+ " (?<MARGIN>(?:\\.\\d)?)\n"
+ " (?<RADIUS>r?[12]\\d(?&MARGIN))\n"
+ " (?<J>(?:1[01]|[4-9])(?&MARGIN)j?)\n"
+ " (?<DIAM>\n"
+ " \\b\n"
+ " (?:\n"
+ " (?&RADIUS)(?:\\s*\\/\\s*(?&J))?\n"
+ " |\n"
+ " (?&J)(?&XSEP)(?&RADIUS)\n"
+ " )\n"
+ " \\b\n"
+ " )\n"
+ " (?<PCD>\\b(?:[pb]cd\\s*)?[34568](?&XSEP)(?:98|[12]\\d{2})(?&MARGIN)\\b)\n"
+ " (?<ET>(?:(?:et|ет)\\s*)?\\-?\\d+(?&MARGIN)\\b)\n"
+ " (?<CB>\\b(?:(?:цо|cb|d(?:ia)?)\\s*)?\\d{2,3}(?&MARGIN)\\b)\n"
+ ")\n"
+ "# End defining\n"
+ "(?:\n"
+ "(?<diam>(?&DIAM))\n"
+ "|\n"
+ "(?<pcd>(?&PCD))\n"
+ "|\n"
+ "(?<et>(?&ET))\n"
+ "|\n"
+ "(?<cb>(?&CB))\n"
+ ")";
final String string = "r22 pcd 4x108 ET 45.5 ЦО 58.5\n"
+ "15 /5.0j 6*108 et45 ЦО 58.5\n"
+ "15/ 5.0j 4x108 -45.5 58.5\n"
+ "pcd 4x138 15/5.0j ET58.5 ЦО45\n"
+ "ЦО45.5 ET58.5 19 pcd 4x 108\n\n"
+ "r15/5.6j pcd 5х112 ET60 CB66\n"
+ "et50 r15/5 5х112 ET60 d66\n"
+ "r15/5 pcd 5*112 ET60 dia 66\n\n"
+ "5.6j x 15.5 pcd 5 х 112 ет -60 CB66\n\n"
+ "5x15.5 5х112.5 ET60 CB66\n\n"
+ "250/50 r16";
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.COMMENTS | Pattern.DOTALL | Pattern.MULTILINE | Pattern.UNICODE_CASE);
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