正则表达式用于解析组合日志与奇怪的用户代理字符串

时间:2014-02-28 10:58:28

标签: regex

我使用下面的正则表达式来解析组合日志格式: -

^(?P<client>\S+) (?P<identd>\S+) (?P<userid>\S+) \[(?P<datetime>[^\]]+)\] "(?P<method>[A-Z]+) (?P<request>[^ "]+)? (?P<version>HTTP/[0-9.]+)" (?P<status>[0-9]{3}) (?P<size>[0-9]+|-) "(?P<referrer>[^"]*)" "{1,3}(?P<useragent>[^"]*)"{1,3} "(?P<cookie>[^"]*)"

它可以找到大多数日志,但随着时间的推移,有很多useragent有奇怪的“里面使正则表达式失败。我复制了下面的一些有问题的用户代理。很高兴,如果有人可以帮助解决我的正则表达式,以便它也适用于以下奇怪的场景: -

  

“Mozilla / 5.0(Linux; U; Android 4.1.1; tr-tr; PIRANHA BUSINESS TAB 7”“Build / JRO03C)AppleWebKit / 534.30(KHTML,类似Gecko)版本/ 4.0 Safari / 534.30 GSA / 2.0。 0.392829"

     

“Mozilla / 4.0(兼容; MSIE 8.0;   Windows NT 5.1;三叉戟/ 4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; xhcueef7 $#$%   fjidf87jcnuFfFJH6 @@ jjfidjcu%09348% “”= “” IEAK)“

1 个答案:

答案 0 :(得分:0)

看起来报价用引号转义。即。

如果"字符后面紧跟另一个"字符,则该字符应被视为用户代理值的单个"

尝试更改此内容:

"{1,3}(?P<useragent>[^"]*)"{1,3}

Regular expression visualization

对此:

"(?P<useragent>(?:[^"]""|[^"])*)"

Regular expression visualization