feat: Update regex patterns for flight plan parsing

The regex patterns used for parsing flight plans have been updated in the `config.go` file. The changes include adding named capture groups for each segment of the flight plan string, allowing for easier extraction of specific information. This update improves the accuracy and flexibility of the flight plan parsing functionality.
This commit is contained in:
windyboy
2024-07-20 01:17:58 +08:00
parent a5a2ced556
commit 75160df8ca
2 changed files with 46 additions and 4 deletions
+46 -1
View File
@@ -45,10 +45,55 @@ type PatternConfig struct {
Expression *regexp.Regexp
}
// Define the regex patterns as constants
const (
// arrPatternString represents the regular expression pattern used to match arrival patterns.
// The pattern matches strings in the format: "(TYPE-NUMBER-SSR-DEPARTURE-ARRIVAL)".
// The pattern captures the following named groups:
// - type: the three-letter type code
// - number: the alphanumeric flight number
// - ssr: the alphanumeric SSR code
// - departure: the four-letter departure airport code
// - arrival: the four-letter arrival airport code
arrPatternString = `^\((?P<type>[A-Z]{3})-(?P<number>[A-Z0-9]+)-(?P<ssr>[A-Z0-9]+)-(?P<departure>[A-Z]{4})-(?P<arrival>[A-Z]{4})\)$`
// depPatternString represents the regular expression pattern used to match departure patterns.
// The pattern matches strings in the format: "(TYPE-NUMBER-SSR-DEPARTURE-DEPARTURE_TIME-ARRIVAL)".
// The pattern captures the following named groups:
// - type: the three-letter type code
// - number: the alphanumeric flight number
// - ssr: the alphanumeric SSR code
// - departure: the four-letter departure airport code
// - departure_time: the four-digit departure time
// - arrival: the four-letter arrival airport code
depPatternString = `^\((?P<type>[A-Z]{3})-(?P<number>[A-Z0-9]+)-(?P<ssr>[A-Z0-9]+)-(?P<departure>[A-Z]{4})-(?P<departure_time>\d{4})-(?P<arrival>[A-Z]{4})\)$`
// fplPatternString is a regular expression designed to parse and extract detailed information from formatted flight plan strings.
// The flight plan string is expected to follow a specific format, encapsulated by parentheses and containing various segments separated by hyphens.
// Each segment captures a different aspect of the flight plan, as detailed below:
//
// - type: Matches a three-letter flight type code.
// - number: Matches the flight number, consisting of letters followed by digits.
// - indicator: Matches a two-letter indicator.
// - aircraft: Matches the aircraft registration or type, which may include a slash and an optional letter.
// - surve: Matches surveillance equipment information, capturing any characters in this segment.
// - departure: Matches the four-letter code of the departure airport.
// - departure_time: Matches the four-digit departure time.
// - speed: Matches the speed, consisting of letters followed by digits.
// - level: Matches the flight level, which can include letters and digits.
// - route: Matches the flight route, capturing any characters in this segment.
// - destination: Matches the four-letter code of the destination airport.
// - estt: Matches the four-digit estimated time of arrival.
// - alter: Matches the four-letter code of an alternate airport.
// - pbn: Matches performance-based navigation equipment information.
// - nav: Matches navigation equipment information.
// - reg: Matches the aircraft registration.
// - eet: Matches the estimated elapsed time, including the four-letter code and four-digit time.
// - sel: Matches the SELCAL code.
// - performance: Matches a single letter indicating the aircraft's performance category.
// - rif: Matches reroute information, including any characters in this segment.
// - remark: Matches remarks, capturing any characters in this segment.
//
// The regular expression uses named capture groups for each segment, allowing for easy extraction of specific information from a matched flight plan string.
fplPatternString = `^\((?P<type>[A-Z]{3})\-(?P<number>[A-Z]+\d+)\-(?P<indicator>[A-Z]{2})(?:.*\s*)?\-(?P<aircraft>[A-Z]+\d+\/?[A-Z]?)\s*\-(?P<surve>.*)\s*\-(?P<departure>[A-Z]{4})(?P<departure_time>\d{4})\s*\-(?P<speed>[A-Z]+\d+)(?P<level>[A-Z0-9]+)\s(?P<route>.*)\s*\-(?P<destination>[A-Z]{4})(?P<estt>\d{4})\s(?P<alter>[A-Z]{4})\s*\-(?P<pbn>PBN\/[A-Z0-9]+)\s(?P<nav>NAV\/\w+)\sREG\/(?P<reg>[A-Z0-9]+)\sEET\/(?P<eet>\w{4}\d{4})\sSEL\/(?P<sel>\w+)\sPER\/(?P<performance>\w)\sRIF\/(?P<rif>\w+\s[A-Z0-9]+\s[A-Z]+)\s*RMK\/(?P<remark>.*)\)$`
)
-3
View File
@@ -6,9 +6,6 @@ import (
)
var _ = Describe("Pattern Parser", func() {
// BeforeEach(func() {
// config.SetMyConfig(config.GetMyConfig())
// })
Describe("FindPatterns", func() {
It("should return the correct BodyConfig based on the message body", func() {