我想从字符串中提取模式,例如:
string x== "1234567 - israel.ekpo@massivelogdata.net cc55ZZ35 1789 Hello Grok";
pattern its should generate is = "%{EMAIL:username} %{USERNAME:password} %{INT:yearOfBirth}"
基本上,我想为Java应用程序中生成的日志创建模式。你知道怎么做吗?
答案 0 :(得分:0)
过去,我使用reguar表达式做过一些操作,但是在我的情况下,字符串具有相同的组成模式或顺序。 在这种情况下,您可以完成3个匹配模式,并按模式顺序进行3次查找操作。
如果不是这样,则必须使用文本分析器或搜索工具。
答案 1 :(得分:0)
建议使用grow library从日志中提取数据。
public final class GrokStage {
private static final void displayResults(final Map<String, String> results) {
if (results != null) {
for(Map.Entry<String, String> entry : results.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
}
public static void main(String[] args) {
final String rawDataLine1 = "1234567 - israel.ekpo@massivelogdata.net cc55ZZ35 1789 Hello Grok";
final String expression = "%{EMAIL:username} %{USERNAME:password} %{INT:yearOfBirth}";
final GrokDictionary dictionary = new GrokDictionary();
// Load the built-in dictionaries
dictionary.addBuiltInDictionaries();
// Resolve all expressions loaded
dictionary.bind();
// Take a look at how many expressions have been loaded
System.out.println("Dictionary Size: " + dictionary.getDictionarySize());
Grok compiledPattern = dictionary.compileExpression(expression);
displayResults(compiledPattern.extractNamedGroups(rawDataLine1));
}
}
输出:
username=israel.ekpo@massivelogdata.net
password=cc55ZZ35
yearOfBirth=1789
注意:
这是以前使用的模式:
%{\S+}@%{\b\w+\b}\.%{[a-zA-Z]+}
[a-zA-Z0-9._-]+
(?:[+-]?(?:[0-9]+))
有关grok模式的更多信息:BuiltInDictionary.java