/ / RegEx, ktorý sa zhoduje s formátom dátumu - regex, bison, flex-lexer

Výraz RegEx, ktorý sa zhoduje s formátom dátumu - regex, bison, flex-lexer

Mám linku s "1999-08-16"^^xsd:date, Aký bude regex pre zachytenie celého reťazca ako "1999-08-16"^^xsd:datev flex súbor? A je možné zachytiť iba "1999-08-16" ako reťazec. Ak áno, aký bude regex pre flex?

odpovede:

0 pre odpoveď č. 1

Vyskúšaj tento:

^"(d{4}-(?:0?[1-9]|1[012])-(?:30|31|[12]d|0?[1-9]))"^^xsd:date$

vysvetlenie:

  • ^ - začiatok trate
  • d{4} - ročná časť
  • (?:0?[1-9]|1[012]) - mesiac, môže byť:
    • 01-09 alebo 1-9 (to je dôvod 0?)
    • 10,11,12 (1[012] časť)
  • ?: znamená nezachytávaciu skupinu (ak potrebujeme len striedajúce sa zápasy s |, ale nevydáva ich používateľovi)
  • (?:30|31|[12]d|0?[1-9]) - denná časť, môže byť:
    • 30,31,
    • 10-29 (časť [12]d)
    • 1-9 alebo 01-09 (0?[1-9])
      Tiež používame skupinu nezachytávajúcu daný deň
  • $ zodpovedá koncu riadku
  • Všetko medzi tým "" je zachytený do štandardnej skupiny na snímanie, pretože potrebujete získať dátum

demonštrácie

UPOZORNENIE: Pri párovaní dní sme dali 1-9 počet dní v poslednej striedavej skupine:

(: 30 | 31 | [12] d |0? [1-9])

že, pretože regexový motor pri daných striedajúcich sa záplavách používa prvý porovnaný výsledok a iné porovnané alternatívy sú ignorované.Napríklad - v reťazci 1 11 výraz:

  • (?:d{2}|d) dáva 2 zápasy
  • (?:d|d{2}) dáva 3 zápasy

0 pre odpoveď č. 2

Na zachytenie celého reťazca "[0-9]{4}-[0-9]{2}-[0-9]{2}"^^[^ ]* môže byť použité.