You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by mm...@apache.org on 2018/07/11 01:33:03 UTC
[47/50] [abbrv] metron git commit: METRON-1655 Make REGEXP_MATCH take
multiple regexs in the 2nd arg (ottobackwards) closes apache/metron#1098
METRON-1655 Make REGEXP_MATCH take multiple regexs in the 2nd arg (ottobackwards) closes apache/metron#1098
Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/b2a22b81
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/b2a22b81
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/b2a22b81
Branch: refs/heads/feature/METRON-1554-pcap-query-panel
Commit: b2a22b81a3d763be81be0746b608fecf2e09c04e
Parents: f183d98
Author: ottobackwards <ot...@gmail.com>
Authored: Tue Jul 10 13:28:39 2018 -0400
Committer: otto <ot...@apache.org>
Committed: Tue Jul 10 13:28:39 2018 -0400
----------------------------------------------------------------------
metron-stellar/stellar-common/README.md | 4 +--
.../stellar/dsl/functions/RegExFunctions.java | 27 +++++++++++++++-----
.../dsl/functions/RegExFunctionsTest.java | 7 +++++
3 files changed, 30 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metron/blob/b2a22b81/metron-stellar/stellar-common/README.md
----------------------------------------------------------------------
diff --git a/metron-stellar/stellar-common/README.md b/metron-stellar/stellar-common/README.md
index 0dd8e16..88a3834 100644
--- a/metron-stellar/stellar-common/README.md
+++ b/metron-stellar/stellar-common/README.md
@@ -886,10 +886,10 @@ Where:
* Returns: The reduction of the list.
### `REGEXP_MATCH`
- * Description: Determines whether a regex matches a string
+ * Description: Determines whether a regex matches a string. If a list of patterns is passed, then the matching is an OR operation
* Input:
* string - The string to test
- * pattern - The proposed regex pattern
+ * pattern - The proposed regex pattern or a list of patterns
* Returns: True if the regex pattern matches the string and false if otherwise.
### `REGEXP_GROUP_VAL`
http://git-wip-us.apache.org/repos/asf/metron/blob/b2a22b81/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/RegExFunctions.java
----------------------------------------------------------------------
diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/RegExFunctions.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/RegExFunctions.java
index ddc8860..48e82a3 100644
--- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/RegExFunctions.java
+++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/RegExFunctions.java
@@ -30,10 +30,10 @@ import org.apache.metron.stellar.dsl.Stellar;
public class RegExFunctions {
@Stellar(name = "REGEXP_MATCH",
- description = "Determines whether a regex matches a string",
+ description = "Determines whether a regex matches a string, if a list of patterns is passed, then the matching is an OR operation",
params = {
"string - The string to test",
- "pattern - The proposed regex pattern"
+ "pattern - The proposed regex pattern or a list of proposed regex patterns"
},
returns = "True if the regex pattern matches the string and false if otherwise.")
public static class RegexpMatch extends BaseStellarFunction {
@@ -42,14 +42,29 @@ public class RegExFunctions {
public Object apply(List<Object> list) {
if (list.size() < 2) {
throw new IllegalStateException(
- "REGEXP_MATCH expects two args: [string, pattern] where pattern is a regexp pattern");
+ "REGEXP_MATCH expects two args: [string, pattern] where pattern is a regexp pattern or a list of regexp patterns");
}
- String patternString = (String) list.get(1);
+ Object patternObject = list.get(1);
String str = (String) list.get(0);
- if (str == null || patternString == null) {
+ if (str == null || patternObject == null) {
return false;
}
- return PatternCache.INSTANCE.getPattern(patternString).matcher(str).matches();
+ if (patternObject instanceof String) {
+ return PatternCache.INSTANCE.getPattern((String)patternObject).matcher(str).matches();
+ } else if (patternObject instanceof Iterable) {
+ boolean matches = false;
+ for (Object thisPatternObject : (Iterable)patternObject) {
+ if (thisPatternObject == null) {
+ continue;
+ }
+ if (PatternCache.INSTANCE.getPattern(thisPatternObject.toString()).matcher(str).matches()) {
+ matches = true;
+ break;
+ }
+ }
+ return matches;
+ }
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/metron/blob/b2a22b81/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java
----------------------------------------------------------------------
diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java
index f0b579f..dc159b8 100644
--- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java
+++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/RegExFunctionsTest.java
@@ -37,11 +37,18 @@ public class RegExFunctionsTest {
put("numbers", "12345");
put("numberPattern", "\\d(\\d)(\\d).*");
put("letters", "abcde");
+ put("letterPattern", "[a-zA-Z]+");
put("empty", "");
}};
Assert.assertTrue(runPredicate("REGEXP_MATCH(numbers,numberPattern)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,numberPattern)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertTrue(runPredicate("REGEXP_MATCH(letters,[numberPattern,letterPattern])", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,[numberPattern])", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,[numberPattern,numberPattern])", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertFalse(runPredicate("REGEXP_MATCH(null,[numberPattern])", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,null)", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
+ Assert.assertFalse(runPredicate("REGEXP_MATCH(letters,[null])", new DefaultVariableResolver(v -> variableMap.get(v),v -> variableMap.containsKey(v))));
}
@Test