拥有以下行的日志,我想获得以下三个捕获组,标记为粗体:
“mywebsite.com:80 1.1.1.1 u311 - - [26 / Sep / 2017:11:28:26 +0200] “GET / website& format = json HTTP / 1.1”200 2820 1s “https://mywebsite.com/index.php”“Mozilla / 5.0(Windows NT 6.1; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 60.0.3112.113 Safari / 537.36“ 1/1194130 ”
这是:
u
开头并且长度不同(u32
,u412
,u9
),因此正则表达式应匹配,直到下一个空格。s
。https://
。我有点失落,因为我没有那么多使用正则表达式。我使用^[u][0-9]
尝试了第一个没有运气,因为它只匹配以u
开头的字符串后跟一个数字。
如果有人想直接尝试,可以使用正则表达式:https://regex101.com/r/so66ku/1
有人可以告诉我如何匹配这三个捕获组?
答案 0 :(得分:2)
由于我不知道你正在使用的正则表达式,这个解决方案可能不起作用,但很可能它会:
(\bu\d+).*?(\b\d+s\b).*?"(https?:\/\/[^"]*)"
将三个子匹配捕获到不同的子组中。
此正则表达式使用word boundary anchors来确保在查找u123
或123s
时我们处于“单词”的开头/结尾。
我同时允许http://
和https://
地址 - 如果您只想https://
,请在?
之后删除https
。
答案 1 :(得分:1)