diff --git a/pom.xml b/pom.xml index 465c9ad..183a689 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ 3.1 2.2.2 - 1.6 + 1.7 @@ -78,12 +78,12 @@ test - + org.apache.commons diff --git a/src/main/java/oi/thekraken/grok/api/Discovery.java b/src/main/java/oi/thekraken/grok/api/Discovery.java index dbc3e52..26e00b8 100644 --- a/src/main/java/oi/thekraken/grok/api/Discovery.java +++ b/src/main/java/oi/thekraken/grok/api/Discovery.java @@ -24,12 +24,11 @@ import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; -import com.google.code.regexp.Matcher; -import com.google.code.regexp.Pattern; - import oi.thekraken.grok.api.exception.GrokException; /** diff --git a/src/main/java/oi/thekraken/grok/api/Grok.java b/src/main/java/oi/thekraken/grok/api/Grok.java index 8e67c91..99df791 100644 --- a/src/main/java/oi/thekraken/grok/api/Grok.java +++ b/src/main/java/oi/thekraken/grok/api/Grok.java @@ -26,13 +26,14 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.code.regexp.Matcher; -import com.google.code.regexp.Pattern; import oi.thekraken.grok.api.exception.GrokException; @@ -359,10 +360,10 @@ public void compile(String pattern, boolean namedOnly) throws GrokException { Matcher m = GrokUtils.GROK_PATTERN.matcher(namedRegex); // Match %{Foo:bar} -> pattern name and subname - // Match %{Foo=regex} -> add new regex definition + // Match %{Foo=regex} -> add new regex definition if (m.find()) { continueIteration = true; - Map group = m.namedGroups(); + Map group = GrokUtils.namedGroups(m, m.group()); if (group.get("definition") != null) { try { addPattern(group.get("pattern"), group.get("definition")); diff --git a/src/main/java/oi/thekraken/grok/api/GrokUtils.java b/src/main/java/oi/thekraken/grok/api/GrokUtils.java index 228dc9a..97c2d44 100644 --- a/src/main/java/oi/thekraken/grok/api/GrokUtils.java +++ b/src/main/java/oi/thekraken/grok/api/GrokUtils.java @@ -1,6 +1,12 @@ package oi.thekraken.grok.api; -import com.google.code.regexp.Pattern; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * {@code GrokUtils} contain set of useful tools or methods. @@ -26,5 +32,30 @@ public class GrokUtils { ")" + ")?" + "\\}"); + + public static final Pattern NAMED_REGEX = Pattern + .compile("\\(\\?<([a-zA-Z][a-zA-Z0-9]*)>"); + + private static Set getNameGroups(String regex) { + Set namedGroups = new LinkedHashSet(); + Matcher m = NAMED_REGEX.matcher(regex); + while (m.find()) { + namedGroups.add(m.group(1)); + } + return namedGroups; + } + public static Map namedGroups(Matcher matcher, + String namedRegex) { + Set groupNames = getNameGroups(matcher.pattern().pattern()); + Matcher localMatcher = matcher.pattern().matcher(namedRegex); + Map namedGroups = new LinkedHashMap(); + if (localMatcher.find()) { + for (String groupName : groupNames) { + String groupValue = localMatcher.group(groupName); + namedGroups.put(groupName, groupValue); + } + } + return namedGroups; + } } diff --git a/src/main/java/oi/thekraken/grok/api/Match.java b/src/main/java/oi/thekraken/grok/api/Match.java index 167c2a2..e21a6ea 100644 --- a/src/main/java/oi/thekraken/grok/api/Match.java +++ b/src/main/java/oi/thekraken/grok/api/Match.java @@ -20,8 +20,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; +import java.util.regex.Matcher; -import com.google.code.regexp.Matcher; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -149,7 +149,7 @@ public void captures() { // _capture.put("LINE", this.line); // _capture.put("LENGTH", this.line.length() +""); - Map mappedw = this.match.namedGroups(); + Map mappedw = GrokUtils.namedGroups(this.match,this.subject); Iterator> it = mappedw.entrySet().iterator(); while (it.hasNext()) {