Mam linię z "1999-08-16"^^xsd:date
. Jaki będzie regex, aby uchwycić cały ciąg jako "1999-08-16"^^xsd:date
w pliku flex? I czy możliwe jest uchwycenie tylko "1999-08-16" jako łańcucha znaków. Jeśli tak, to jaki będzie regex dla niego w flex?
Odpowiedzi:
0 dla odpowiedzi № 1Spróbuj tego:
^"(d{4}-(?:0?[1-9]|1[012])-(?:30|31|[12]d|0?[1-9]))"^^xsd:date$
Wyjaśnienie:
^
- początek liniid{4}
- część roczna(?:0?[1-9]|1[012])
- miesiąc, może być:- 01-09 lub 1-9 (to dlaczego
0?
) - 10,11,12 (
1[012]
część)
- 01-09 lub 1-9 (to dlaczego
?:
oznacza grupę niezapisującą (jeśli potrzebujemy tylko dopasowań naprzemiennych z|
, ale nie wysyłając ich do użytkownika)(?:30|31|[12]d|0?[1-9])
- część dzienna, może być:- 30,31,
- 10-29 (część
[12]d
) - 1-9 lub 01-09 (
0?[1-9]
)
Również używamy grupy niezapisującej do dopasowania dnia
$
dopasowuje koniec linii- Wszystko pomiędzy
""
jest przechwytywany do standardowej grupy przechwytywania, ponieważ musisz wyodrębnić datę
OGŁOSZENIE:
Kiedy dopasowujemy dni, które kładziemy 1-9
Numery dni w LAST przemiennej grupie:
(?: 30 | 31 | [12] d |0? [1-9])
dzieje się tak, ponieważ silnik wyrażeń regularnych, gdy podane są dopasowania naprzemienne, używa PIERWSZEGO dopasowanego wyniku, a inne dopasowane alternatywy są ignorowane. w ciąg 1 11
wyrażenie:
(?:d{2}|d)
daje 2 mecze(?:d|d{2})
daje 3 mecze
0 dla odpowiedzi nr 2
Aby uchwycić cały ciąg "[0-9]{4}-[0-9]{2}-[0-9]{2}"^^[^ ]*
może być użyte.