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

Regex 用于解析带有奇怪用户代理字符串的组合日志的正则表达式,regex,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

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

^(?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>[^"]*)"
^(?P\S+(?P\S+)\[(?P[^\]+)\]”(?P[A-Z]+)(?P[^“]+)?(?PHTTP/[0-9.]+)”(?P[0-9]{3})(?P[0-9]+|-)”(?P[^“]*)“{1,3}(?P[^“]*)”{1,3}”(?P[^“]*)”
它适用于大多数日志,但随着时间的推移,其中有大量的useragent have strange”,这使得正则表达式失败。我复制了下面一些有问题的user agent。如果有人能够帮助修复我的正则表达式,那么它也适用于以下奇怪的场景,我将非常高兴:-

“Mozilla/5.0(Linux;U;Android 4.1.1;tr;食人鱼业务选项卡7”“构建/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;Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.50727;xhcueef7$#$% fjidf87jcnuFfFJH6@@jjfidjcu%09348%“”=“IEAK”


看起来引号是用引号转义的

如果
字符后面紧接着另一个
,则应将该字符视为单个
,以表示用户代理的值

尝试更改此选项:

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

为此:

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