J'ai une ligne avec "1999-08-16"^^xsd:date
. Quel sera le regex pour capturer la chaîne entière en tant que "1999-08-16"^^xsd:date
en fichier flex? Et, est-il possible de ne capturer que "1999-08-16" en tant que chaîne. Si oui, alors quelle sera la regex pour cela en flex?
Réponses:
0 pour la réponse № 1Essaye celui-là:
^"(d{4}-(?:0?[1-9]|1[012])-(?:30|31|[12]d|0?[1-9]))"^^xsd:date$
Explication:
^
- début de ligned{4}
- partie d'année(?:0?[1-9]|1[012])
- mois, peut être:- 01-09 ou 1-9 (c’est pourquoi
0?
) - 10,11,12 (
1[012]
partie)
- 01-09 ou 1-9 (c’est pourquoi
?:
signifie groupe non capturant (si nous avons juste besoin d'alterner les correspondances avec|
, mais ne les renvoie pas à l'utilisateur)(?:30|31|[12]d|0?[1-9])
- partie de jour, peut être:- 30,31,
- 10-29 (partie
[12]d
) - 1-9 ou 01-09 (
0?[1-9]
)
Nous utilisons également un groupe non capturant pour la journée correspondante
$
correspond à la fin de la ligne- Tout entre
""
est capturé dans un groupe de capture standard, car vous devez extraire la date
REMARQUER:
Lorsque les jours correspondants, nous mettons 1-9
nombre de jours dans le DERNIER groupe alternant:
(?: 30 | 31 | [12] d |0? [1-9])
cela "parce que le moteur regex quand on donne des correspondances en alternance utilise le résultat correspondant PREMIER et que les autres alternatives correspondantes sont ignorées. Par exemple- en ficelle 1 11
expression:
(?:d{2}|d)
donne 2 matches(?:d|d{2})
donne 3 matches
0 pour la réponse № 2
Pour capturer une chaîne entière "[0-9]{4}-[0-9]{2}-[0-9]{2}"^^[^ ]*
peut être utilisé.