Команда ReQL: match
Синтаксис команды
string.match(regexp) → nil/object
Описание
Сопоставляет строку с регулярным выражением. Если совпадение найдено, возвращает объект со следующими полями:
-
str: Совпавшая строка -
start: Начало совпавшей строки -
end: Конец совпавшей строки -
groups: Группы захвата, определённые в скобках
Если совпадение не найдено, возвращает nil.
Поддерживает синтаксис RE2. Для выполнения нечувствительного к регистру поиска добавьте префикс (?i). Для получения дополнительной информации о флагах смотрите документацию RE2.
Команда match не поддерживает обратные ссылки.
Пример: Получить всех пользователей, чьё имя начинается с "A". Поскольку nil вычисляется как false в filter, вы можете использовать результат match в качестве предиката.
r.table('users').filter{ |doc|
doc['name'].match("^A")
}.run(conn)
Пример: Получить всех пользователей, чьё имя заканчивается на "n".
r.table('users').filter{ |doc|
doc['name'].match("n$")
}.run(conn)
Пример: Получить всех пользователей, чьё имя содержит "li".
r.table('users').filter{ |doc|
doc['name'].match("li")
}.run(conn)
Пример: Получить всех пользователей, чьё имя равно "John" (нечувствительно к регистру).
r.table('users').filter{ |doc|
doc['name'].match("(?i)^john$")
}.run(conn)
Пример: Получить всех пользователей, чьё имя состоит только из символов от "a" до "z".
r.table('users').filter{ |doc|
doc['name'].match("(?i)^[a-z]+$")
}.run(conn)
Пример: Получить всех пользователей, у которых код почты представляет собой строку из 5 цифр.
r.table('users').filter{ |doc|
doc['zipcode'].match("\\d{5}")
|.run(conn)
Пример: Извлечь домен из базового адреса электронной почты
r.expr("name@domain.com").match(".*@(.*)").run(conn)
Результат:
{
:start => 0,
:end => 20,
:str => "name@domain.com",
:groups => [
{
:end => 17,
:start => 7,
:str => "domain.com"
}
]
}
Затем вы можете извлечь только домен с помощью селектора [].
r.expr("name@domain.com").match(".*@(.*)")["groups"][0]["str"].run(conn)
Возвращает 'domain.com'
Пример: Не удалось разобрать домен, возвращается nil.
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/ruby/match/