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