首页 / 日志 / java-使用正则表达式解析日志
java-使用正则表达式解析日志
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-使用正则表达式解析日志,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1230字,纯文字阅读大概需要2分钟。
内容图文
![java-使用正则表达式解析日志](/upload/InfoBanner/zyjiaocheng/695/4c025443c8ba4aad927a2758d6661e77.jpg)
我正在寻找一种解析Varnish日志文件的解决方案.看起来像:
178.232.38.87 - - [23/May/2012:14:01:05 +0200] "GET http://static.vg.no/iphone/js/front-min.js?20120509-1 HTTP/1.1" 200 2013 "http://touch.vg.no/" "Mozilla/5.0 (Linux; U; Android 2.3.3; en-no; HTC Nexus One Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
可以区分以下元素:
%h%l%u%t“%r”%s%b“%{Referer} i”“%{User-agent} i”
但我仍然不知道该怎么做.简单的String.split(“”);将无法正常工作.
我知道正则表达式具有通用规则,但是最合适的将是Java.
谢谢
解决方法:
我想出了一种根据可能的/期望的值从与各个字段匹配的块中构建正则表达式的方法.
String rexa = "(\\d+(?:\\.\\d+){3})"; // an IP address
String rexs = "(\\S+)"; // a single token (no spaces)
String rexdt = "\\[([^\\]]+)\\]"; // something between [ and ]
String rexstr = "\"([^\"]*?)\""; // a quoted string
String rexi = "(\\d+)"; // unsigned integer
String rex = String.join( " ", rexa, rexs, rexs, rexdt, rexstr,
rexi, rexi, rexstr, rexstr );
Pattern pat = Pattern.compile( rex );
Matcher mat = pat.matcher( h );
if( mat.matches() ){
for( int ig = 1; ig <= mat.groupCount(); ig++ ){
System.out.println( mat.group( ig ) );
}
}
当然,可以用rex代替rexa或rexi.
内容总结
以上是互联网集市为您收集整理的java-使用正则表达式解析日志全部内容,希望文章能够帮你解决java-使用正则表达式解析日志所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。