football_match_parser 0.1.1

Simple parser for reading football match lines(date, time, teams, score, stadium, and status) and converting them into structured data.
Documentation
///Space or tab
WHITESPACE = _{ " " | "\t" }
/// Score or mark in format: 4:1, 45', 90+3', live, or -
score_or_mark = {
      ASCII_DIGIT{1,2} ~ ":" ~ ASCII_DIGIT{1,2}
    | ASCII_DIGIT{1,3} ~ ("+" ~ ASCII_DIGIT{1,2})? ~ "'"
    | ^"live"
    | "-"
}
///Date in format YYYY-MM-DD(For example: 2025-11-05)
date = @{
    ASCII_DIGIT{4} ~ "-" ~
    ( "0" ~ ('1'..'9') | "1" ~ ('0'..'2') ) ~ "-" ~
    ( "0" ~ ('1'..'9') | ('1'..'2') ~ ASCII_DIGIT | "3" ~ ('0'..'1') )
}
///Time in format HH:MM, hours can be from 00 to 23, minnutes can be from 00 to 59(For example: 17:45)
time = @{
    ( "0" ~ ASCII_DIGIT
    | "1" ~ ASCII_DIGIT
    | "2" ~ ('0'..'3') )
    ~ ":"
    ~ ( "0" ~ ASCII_DIGIT
    | ('1'..'5') ~ ASCII_DIGIT )
}
///One space
SP = @{ " " }
///Letters, numbers or simple symbols in names(for teams' names and stadiums' names
name_char = { ('a'..'z' | 'A'..'Z' | '0'..'9') | "'" | "." | "(" | ")" | "&" }
///One word in team name(For example: PSG), can have a hyphen(For example: Dnipro-1, Saint-Germain)
team_word  = @{ name_char+ ~ ( "-" ~ name_char+ )* }
///Full team name, which can consists of few words(For example: Real Madrid, St. Pauli)
team_name = @{team_word ~ (SP ~ team_word )* ~ &( SP | ( "-" ~ WHITESPACE ) | ";" | !ANY )}
///Two teams, that have a match, in format: team1 - team2
teams = {team_name ~ WHITESPACE* ~ "-" ~ WHITESPACE* ~ team_name}
///Stadium name, which can consists of few words(For example: St. Mary's Stadium, Dnipro Arena)
stadium_name = { name_char+ ~ (SP ~ name_char+)* ~ &( ";" | !ANY ) }
///Status, that can be written in any case, in format: played, scheduled, or ongoing
status = {^"played" | ^"scheduled" | ^"ongoing"}
///Full match line in format: date; time; teams; score; stadium(optional); status(optional)
match_line = {date ~ ";" ~ time ~ ";" ~ teams ~ ";" ~ score_or_mark
  ~ (";" ~ stadium_name ~ (";" ~ status)? | ";" ~ status)?
  ~ !";"
}