This is an automated email from the ASF dual-hosted git repository.

krlawrence pushed a commit to branch TINKERPOP-2652
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit eeb584a642ae7db7b9e95029890a45ae71dcf5d5
Author: Kelvin Lawrence <[email protected]>
AuthorDate: Thu Nov 18 13:47:40 2021 -0600

    Initial changes for regex support. More to follow
---
 .../tinkerpop/gremlin/process/traversal/Text.java  | 44 ++++++++++++++++++++++
 .../tinkerpop/gremlin/process/traversal/TextP.java | 18 +++++++++
 2 files changed, 62 insertions(+)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Text.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Text.java
index 9c25825..5d443ff 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Text.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Text.java
@@ -19,6 +19,8 @@
 package org.apache.tinkerpop.gremlin.process.traversal;
 
 import java.util.function.BiPredicate;
+import java.util.regex.Pattern; 
+import java.util.regex.Matcher; 
 
 /**
  * {@link Text} is a {@link java.util.function.BiPredicate} that determines 
whether the first string starts with, starts
@@ -30,6 +32,48 @@ import java.util.function.BiPredicate;
 public enum Text implements BiPredicate<String, String> {
 
     /**
+     * Evaluates if the first string has a regex match with the second 
(pattern).
+     *
+     * @since 3.6.0
+     */
+    regex {
+        @Override
+        public boolean test(final String value, final String regex) {
+            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+            Matcher matcher = pattern.matcher(value);
+            return matcher.find();   
+        }
+
+        /**
+         * The negative of {@code regex} is {@link #notRegex}.
+         */
+        @Override
+        public Text negate() {
+            return notRegex;
+        }
+    },
+    /**
+     * Evaluates if the first string does not have a regex match with the 
second (pattern).
+     *
+     * @since 3.6.0
+     */
+    notRegex {
+        @Override
+        public boolean test(final String value, final String regex) {
+           Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+           Matcher matcher = pattern.matcher(value);
+           return !matcher.find();   
+        }
+
+        /**
+         * The negative of {@code notRegex} is {@link #regex}.
+         */
+        @Override
+        public Text negate() {
+            return regex;
+        }
+    },
+    /**
      * Evaluates if the first string starts with the second.
      *
      * @since 3.4.0
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TextP.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TextP.java
index 2c28853..5b72521 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TextP.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TextP.java
@@ -106,4 +106,22 @@ public class TextP extends P<String> {
     public static TextP notContaining(final String value) {
         return new TextP(Text.notContaining, value);
     }
+    
+    /**           
+     * Determines if String has a match with the given REGEX pattern. 
+     *
+     * @since 3.6.0
+     */
+    public static TextP regex(final String value) {
+        return new TextP(Text.regex, value);
+    }
+
+    /**           
+     * Determines if String has no match with the given REGEX pattern. 
+     *
+     * @since 3.6.0
+     */
+    public static TextP notRegex(final String value) {
+        return new TextP(Text.notRegex, value);
+    }
 }

Reply via email to