import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^((?! # This and the final line allow invert the regex condition\n\n"
+ "PA(?:\n"
+ " \\*(?:N\\s*\\d+\\s*\\.\\s*\\d+\\s*\\*ADP)? # match the asterisk cases\n"
+ " | \\#\\s*N\\s*\\d+\\s* # or the hash cases\n"
+ " (?:[\\.,-]\\s*\\d+\\s*){0,5}\n"
+ " \\#ADP\\s*(?:\\d|\\#PUSH)\n"
+ " | \\#NUAL,AZ,AN\\#FOP\\d # or the 'UAL,AZ,AN' literal\n"
+ ")\n\n"
+ ").)*$";
final String string = "# OP's samples\n"
+ "PA#N1.1#ADP1\n"
+ "PA#N1.1,1.2#ADP1,2\n"
+ "PA#N1#ADP4\n"
+ "PA#N1,2#ADP4\n"
+ "PA#N1,2.1,3#ADP1\n"
+ "PA#N1.1-3#ADP1\n"
+ "PA#N1.1- 3.2#ADP1,2\n"
+ "PA#NUAL,AZ,AN#FOP123\n"
+ "PA#N1.1-2.1,3.1#ADP#PUSH\n"
+ "PA*N1.1*ADP\n"
+ "PA*\n\n"
+ "# The same with some spaces adde here and there\n"
+ "PA# N 1.1 #ADP1\n"
+ "PA#N 1.1,1.2#ADP1,2 \n"
+ "PA#N1#ADP4 \n"
+ "PA#N1,2 #ADP4 \n"
+ "PA#N1,2. 1,3#ADP1 \n"
+ "PA#N1.1-3#ADP1\n"
+ "PA#N1.1- 3.2#ADP1,2 \n"
+ "PA#NUAL,AZ,AN#FOP123 \n"
+ "PA#N1.1-2 . 1 , 3 . 1 #ADP#PUSH \n"
+ "PA*N1 .1*ADP \n\n"
+ "PA#N1.1...#5#SOME TEXT\n";
final Pattern pattern = Pattern.compile(regex, 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