Ruby Regex para el formato de registro común

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:

  • IP
  • identidad
  • nombre de usuario
  • hora
  • solicitud
  • estado
  • Tamaño del objeto.

¿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]*)$