J'essaie d'analyser un journal Web avec des expressions régulières à l'aide de RegexSerDe. Il fonctionne en faisant correspondre chaque groupe regex avec une colonne dans une table et si le groupe regex est vide, il attribue une valeur nulle à cette colonne.Champs facultatifs lors de la correspondance des lignes de fichier journal à l'aide de regex
Je n'arrive pas à identifier les lignes de journal avec des champs manquants. Il existe deux types de lignes dans ce journal:
<134>2016-10-23T23:59:59Z cache-iad2134 fastly[502801]: 52.55.94.131 "-" "-" Sun, 23 Oct 2016 23:59:59 GMT GET /apps/events/2016/10/11/3062653/?REC_ID=3062653&id=0 200
<134>2016-10-23T23:59:59Z cache-dfw1835 fastly[502801]: 1477267199
J'ai écrit le ci-dessous regex qui correspond au premier type de ligne avec tous les champs:
^(\\S+) (\\S+) (\\S+) (\\S+) "(\\S+)" "(\\S+)" (.*) (\\d{3})
Mais j'ai joué avec ?
pour obtenir le regex pour éventuellement ignorer les champs après les 4 premiers mais a continué à déconner les colonnes.
Des suggestions sur la façon dont je devrais ajouter le ?
sans changer le nombre de groupes (de sorte que le désérialiseur ne crache pas)? Ou tout autre moyen de le faire, vous suggéreriez?
Puisque vous n'avez pas montré l'expression rationnelle avec les modificateurs optionnels, comment pouvons-nous vous dire ce que vous avez mal fait? La seule chose que je peux penser est que vous avez oublié de rendre les espaces entre les champs facultatifs aussi. – Barmar