Команда ReQL: match
Синтаксис команды
string.match(regexp) → null/object
Описание
Сопоставляет строку с регулярным выражением. Если совпадение найдено, возвращает объект со следующими полями:
-
str: Совпавшая строка -
start: Начало совпавшей строки -
end: Конец совпавшей строки -
groups: Группы захвата, определённые скобками
Если совпадение не найдено, возвращает null.
Поддерживает синтаксис RE2. Можно включить регистронезависимое сопоставление, добавив префикс (?i) к регулярному выражению. Дополнительные флаги см. в документации RE2.
Команда match не поддерживает обратные ссылки.
Пример: Получить всех пользователей, чьё имя начинается с «A». Так как null в фильтре вычисляется как false, результат match можно использовать в качестве предиката.
r.table("users").filter(doc -> doc.g("name").match("^A")).run(conn);
Пример: Получить всех пользователей, чьё имя заканчивается на «n».
r.table("users").filter(doc -> doc.g("name").match("n$")).run(conn);
Пример: Получить всех пользователей, чьё имя содержит «li».
r.table("users").filter(doc -> doc.g("name").match("li")).run(conn);
Пример: Получить всех пользователей, чьё имя равно «John», выполнив регистронезависимый поиск.
r.table("users").filter(doc -> doc.g("name").match("(?i)^john$")).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"
}
]
}
Затем можно извлечь домен с помощью g() и nth.
r.expr("name@domain.com").match(".*@(.*)").g("groups").nth(0)
.g("str").run(conn);
Возвращает domain.com.
Пример: Ошибка при разборе имени домена вернёт null.
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/java/match/