我有一些IIS日志,我希望从cs_uri_stem字段中提取文件路径和文件名。示例IIS事件如下:
2018-02-21 04:39:13 <IPv4> GET /www/images/flash_email_large.gif - 8030 - <IPv4> Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.3;+WOW64;+Trident/7.0;+.NET4.0E;+.NET4.0C;+.NET+CLR+3.5.30729;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.30729;+Microsoft+Outlook+16.0.4654;+ms-office;+MSOffice+16) 200 0 0 531
我的正则表达式如下:
.*?(GET|POST|HEAD|OPTIONS|PROPFIND)\s(?P<file_path>(?:[^\/]*\/)*)(?P<file_name>.*)\s-
但我在文件名后面有额外的字符(在本例中为flash_email_large.gif)。如何在正则表达式中排除文件名后的所有内容?
THX
答案 0 :(得分:1)
您可以使用此性能更高的正则表达式捕获2个捕获组中的文件路径和文件名:
\s(GET|POST|HEAD|OPTIONS|PROPFIND)\s(?P<file_path>\S*\/)(?P<file_name>\S+)\s-
<强>的变化:强>
.*?
替换为\s
(?:[^\/]*\/)*
.*
替换为\S+