ReQL command: match

Command syntax

string.match(regexp) → None/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 None.

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 None evaluates to false in filter, you can just use the result of match for the predicate.

r.table('users').filter(lambda doc:
    doc['name'].match("^A")
).run(conn)

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

r.table('users').filter(lambda doc:
    doc['name'].match("n$")
).run(conn)

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

r.table('users').filter(lambda doc:
    doc['name'].match("li")
).run(conn)

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

r.table('users').filter(lambda 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(lambda 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(lambda doc:
    doc['zipcode'].match("\d{5}")
).run(conn)

Example: Retrieve the domain of a basic email

r.expr("[email protected]").match(".*@(.*)").run(conn)

Result:

{
    "start": 0,
    "end": 20,
    "str": "[email protected]",
    "groups":[
        {
            "end": 17,
            "start": 7,
            "str": "domain.com"
        }
    ]
}

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

r.expr("[email protected]").match(".*@(.*)")["groups"][0]["str"].run(conn)

Returns 'domain.com'

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

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

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/match/