import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(?<callsign>\\w+?)>APRS,.+?,\n"
+ "(?<receiver>\\w+):\\/\n"
+ "(?<time>\\d{6})h\n"
+ "(?<latitude>\\d{4}\\.\\d{2}[NS]).\n"
+ "(?<longitude>\\d{5}\\.\\d{2}[EW]).\n"
+ "(?:(?<heading>\\d{3})\\/(?<ground_speed>\\d{3}))?.*?\n"
+ "\\/A=(?<altitude>\\d{6})\\s\n"
+ "(?:!W((?<latitude_enhancement>\\d)(?<longitude_enhancement>\\d))!)?\n"
+ "(?:v(?<version>\\d+\\.\\d+\\.\\d+)(?:\\.(?<platform>.+?))?\\s)?\n"
+ "CPU:(?<cpu_load>[\\d.]+)\\s\n"
+ "RAM:(?<ram_free>[\\d.]+)\\/(?<ram_total>[\\d.]+)MB\\s\n"
+ "NTP:(?<ntp_offset>[\\d.]+)ms\\/(?<ntp_correction>[+-][\\d.]+)ppm\\s?\n"
+ "(?:(?<cpu_temperature>[+-][\\d.]+)C\\s*)?\n"
+ "(?:RF:\n"
+ " (?:\n"
+ " (?<manual_correction>[+-][\\d]+)\n"
+ " (?<automatic_correction>[+-][\\d.]+)ppm\\/\n"
+ " )?\n"
+ " (?<signal>[+-][\\d.]+)dB\n"
+ ")?";
final String string = "LKHS>APRS,TCPIP*,qAC,GLIDERN2:/211635h4902.45NI01429.51E&000/000/A=001689 v0.2.4.ARM CPU:0.2 RAM:777.7/972.2MB NTP:3.1ms/-3.8ppm +33.6C RF:+62-0.8ppm/+33.66dB\n\n"
+ "Moosburg>APRS,TCPIP*,qAC,GLIDERN1:/232205h4827.52NI01155.89E&000/000/A=001397 v0.2.4.ARM CPU:0.8 RAM:788.7/1017.6MB NTP:16000.0ms/-73.4ppm RF:+8.00dB";
final Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
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