Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Запрос DSL

Синтаксис регулярных выражений

Регулярное выражение — это способ сопоставления шаблонов в данных с использованием символов-заменителей, называемых операторами.

Elasticsearch поддерживает регулярные выражения в следующих запросах:

  • regexp
  • query_string

Elasticsearch использует движок регулярных выражений Apache Lucene для анализа этих запросов.

Зарезервированные символы

Движок регулярных выражений Lucene поддерживает все символы Юникода. Однако следующие символы зарезервированы как операторы:

. ? + * | { } [ ] ( ) " \

В зависимости от включенных дополнительных операторов, следующие символы также могут быть зарезервированы:

# @ & < >  ~

Для использования одного из этих символов буквально, экранируйте его предшествующей обратной косой чертой или заключите в двойные кавычки. Например:

\@                  # renders as a literal '@'
\\                  # renders as a literal '\'
"john@smith.com"    # renders as 'john@smith.com'

Стандартные операторы

Движок регулярных выражений Lucene не использует библиотеку Perl Compatible Regular Expressions (PCRE), но поддерживает следующие стандартные операторы.

.

Сопоставляет любой символ. Например:

ab.     # matches 'aba', 'abb', 'abz', etc.
?

Повторяет предыдущий символ ноль или один раз. Часто используется для того, чтобы сделать предыдущий символ необязательным. Например:

abc?     # matches 'ab' and 'abc'
+

Повторяет предыдущий символ один или более раз. Например:

ab+     # matches 'ab', 'abb', 'abbb', etc.
*

Повторяет предыдущий символ ноль или более раз. Например:

ab*     # matches 'a', 'ab', 'abb', 'abbb', etc.
{}

Минимальное и максимальное количество повторений предыдущего символа. Например:

a{2}    # matches 'aa'
a{2,4}  # matches 'aa', 'aaa', and 'aaaa'
a{2,}   # matches 'a` repeated two or more times
|

Оператор ИЛИ. Сопоставление будет выполнено, если наибольший шаблон либо слева, либо справа соответствует. Например:

abc|xyz  # matches 'abc' and 'xyz'
( … )

Образует группу. Вы можете использовать группу, чтобы обработать часть выражения как один символ. Например:

abc(def)?  # matches 'abc' and 'abcdef' but not 'abcd'
[ … ]

Сопоставление одного из символов в скобках. Например:

[abc]   # matches 'a', 'b', 'c'

Внутри скобок, - указывает диапазон, если - не является первым символом или не экранирован. Например:

[a-c]   # matches 'a', 'b', or 'c'
[-abc]  # '-' is first character. Matches '-', 'a', 'b', or 'c'
[abc\-] # Escapes '-'. Matches 'a', 'b', 'c', or '-'

^ перед символом в скобках отрицает символ или диапазон. Например:

[^abc]      # matches any character except 'a', 'b', or 'c'
[^a-c]      # matches any character except 'a', 'b', or 'c'
[^-abc]     # matches any character except '-', 'a', 'b', or 'c'
[^abc\-]    # matches any character except 'a', 'b', 'c', or '-'

Дополнительные операторы

Вы можете использовать параметр flags для включения дополнительных операторов в движок регулярных выражений Lucene.

Для включения нескольких операторов используйте разделитель |. Например, значение flags, равное COMPLEMENT|INTERVAL, включает операторы COMPLEMENT и INTERVAL.

Допустимые значения

ALL (По умолчанию)
Включает все дополнительные операторы.
"" (пустая строка)
Псевдоним для значения ALL.
COMPLEMENT

Включает оператор ~. Вы можете использовать ~, чтобы отменить кратчайший последующий шаблон. Например:

a~bc   # matches 'adc' and 'aec' but not 'abc'
EMPTY

Включает оператор # (пустое множество). Оператор # не сопоставляет ни одну строку, даже пустую.

Если вы создаёте регулярные выражения путём программно комбинированных значений, вы можете передать # для указания "ни одной строки". Это позволяет избежать случайного сопоставления пустых строк или других нежелательных строк. Например:

#|abc  # matches 'abc' but nothing else, not even an empty string
INTERVAL

Включает операторы <>. Вы можете использовать <> для сопоставления числового диапазона. Например:

foo<1-100>      # matches 'foo1', 'foo2' ... 'foo99', 'foo100'
foo<01-100>     # matches 'foo01', 'foo02' ... 'foo99', 'foo100'
INTERSECTION

Включает оператор &, который действует как оператор И. Сопоставление будет выполнено, если шаблоны слева и справа совпадают. Например:

aaa.+&.+bbb  # matches 'aaabbb'
ANYSTRING

Включает оператор @. Вы можете использовать @ для сопоставления всей строки.

Вы можете комбинировать оператор @ с операторами & и ~, чтобы создать логику "все, кроме". Например:

@&~(abc.+)  # matches everything except terms beginning with 'abc'
NONE
Отключает все дополнительные операторы.

Неподдерживаемые операторы

Движок регулярных выражений Lucene не поддерживает операторы якорей, такие как ^ (начало строки) или $ (конец строки). Для сопоставления термина регулярное выражение должно сопоставлять всю строку.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/regexp-syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API