某些背景
我正在编写一个应用程序,它将连续提供字符串/数据流。数据是日志消息,但来自不同的机器和不同的应用程序。所以他们的格式可能略有不同。
我的目标是从每条消息中获取单个组件,而不管源是什么,尝试以某种方式规范化数据,以便常见部分,如主机,线程,时间,消息和级别。
问题
我意识到像Awstats这样的东西会记录解析,但是在这种情况下,我只有两个选项是使用一个可以执行此操作的库或者写一些东西,而我宁愿不重新发明轮子。
答案 0 :(得分:3)
您可以使用解析器组合器。例如。这解析了一个整数元组:
import scala.util.parsing.combinator.RegexParsers
object Parser extends RegexParsers {
def intPair = INT ~ "," ~ INT ^^ { x => (x._1._1.toInt,x._2.toInt) }
val INT = "[0-9]+".r
}
Parser.parseAll(Parser.intPair, "10,22") // => (10,22)
这是一个很好的起点:http://www.codecommit.com/blog/scala/the-magic-behind-parser-combinators