Back to top

    ReQL command: match

    Command syntax

    string.match(regexp) → nil/object

    Description

    Matches against a regular expression. If there is a match, returns an object with the fields:

    • str: The matched string
    • start: The matched string’s start
    • end: The matched string’s end
    • groups: The capture groups defined with parentheses

    If no match is found, returns nil.

    Accepts RE2 syntax. You can enable case-insensitive matching by prefixing the regular expression with (?i). See the linked RE2 documentation for more flags.

    The match command does not support backreferences.

    Example: Get all users whose name starts with “A”. Because nil evaluates to false in filter, you can just use the result of match for the predicate.

    r.table('users').filter{ |doc|
        doc['name'].match("^A")
    }.run(conn)
    

    Example: Get all users whose name ends with “n”.

    r.table('users').filter{ |doc|
        doc['name'].match("n$")
    }.run(conn)
    

    Example: Get all users whose name has “li” in it

    r.table('users').filter{ |doc|
        doc['name'].match("li")
    }.run(conn)
    

    Example: Get all users whose name is “John” with a case-insensitive search.

    r.table('users').filter{ |doc|
        doc['name'].match("(?i)^john$")
    }.run(conn)
    

    Example: Get all users whose name is composed of only characters between “a” and “z”.

    r.table('users').filter{ |doc|
        doc['name'].match("(?i)^[a-z]+$")
    }.run(conn)
    

    Example: Get all users where the zipcode is a string of 5 digits.

    r.table('users').filter{ |doc|
        doc['zipcode'].match("\\d{5}")
    |.run(conn)
    

    Example: Retrieve the domain of a basic email

    r.expr("name@domain.com").match(".*@(.*)").run(conn)
    

    Result:

    {
        :start => 0,
        :end => 20,
        :str => "name@domain.com",
        :groups => [
            {
                :end => 17,
                :start => 7,
                :str => "domain.com"
            }
        ]
    }
    

    You can then retrieve only the domain with the [] selector.

    r.expr("name@domain.com").match(".*@(.*)")["groups"][0]["str"].run(conn)
    

    Returns 'domain.com'

    Example: Fail to parse out the domain and returns nil.

    r.expr("name[at]domain.com").match(".*@(.*)").run(conn)
    

    Get more help

    Couldn't find what you were looking for?