Hola chicos, estoy buscando una expresión regular que “analice” una línea del formato Common Log Format y me dé las 7 variables de la misma:
¿Alguien ya ha implementado este regex?
Solo obtendría el tiempo y la solicitud primero, luego es solo una división:
a = '127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326' time = a.slice!(/\[.*?\]/) request = a.slice!(/".*"/) ip, identity, username, status, size = a.split
Entrada:
127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
Regex:
(\S+)\s+(\S+)\s+(\S+)\s+(\[.*?\])\s+(".*?")\s+(\S+)\s+(\S+)
Donde los grupos de captura están numerados como en el desglose a continuación.
Descompostura:
Group Regex Match #1 IP (\S+) 127.0.0.1 #2 Identity (\S+) user-identifier #3 Username (\S+) frank #4 Time (\[.*?\]) [10/Oct/2000:13:55:36 -0700] #5 Request (".*?") "GET /apache_pb.gif HTTP/1.0" #6 Status (\S+) 200 #7 Size (\S+) 2326 each separated by a \s+
También se me ocurrió mi propia expresión regular que también divide el verbo, uri y la versión HTTP.
^([\d\.]*)\s([\w|-]*)\s([\w|-]*)\s\[(.*)\]\s\"([\w]*)\s(.*)\s(.*)\"\s([\d]*)\s([\d]*)$