# IndexRegEx Функция скрипта и диаграммы

IndexRegEx() выполняет поиск во входной строке и возвращает начальную позицию n-го вхождения указанного шаблона регулярного выражения. Дополнительный третий аргумент count определяет значение n (1, если опущен). Позиции в строке нумеруются слева направо от 1 и далее. Если совпадение не найдено, функция возвращает 0.

Эта функция выполняет операции с регулярными выражениями, чувствительные к регистру. В качестве альтернативы можно использовать вариант IndexRegExI() для выполнения операций с регулярными выражениями без учета регистра.

Синтаксис:

IndexRegEx (text, regex [, count])

Возвращаемые типы данных: целое

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Текст входной строки, в которой требуется выполнить поиск регулярного выражения. |
| regex | Регулярное выражение, которое будет использоваться для поиска входной строки. |
| count | Номер совпадения. Это полезно, когда в тексте может быть найдено несколько совпадений с регулярным выражением. Например, укажите значение `4`, чтобы извлечь позицию четвертого совпадения.<br><br>Данный аргумент является необязательным. Если значение на задано, по умолчанию используется 1. Можно указать отрицательное значение для поиска совпадений справа налево. |

Примеры функции

| Пример | Результат |
| --- | --- |
| `IndexRegEx('abc123','[a-z][0-9]+')` | Возвращает `3` (начальная позиция первого совпадения). |
| `IndexRegEx('abc123','[a-z][0-9]+',2)` | Возвращает `0` (регулярное выражение не имеет второго совпадения). |
| `IndexRegEx('ABC123','[a-z][0-9]+')` | Возвращает `0`, поскольку IndexRegEx() учитывает регистр. |
| `IndexRegExI('ABC123','[a-z][0-9]+')` | Возвращает `3`. Используется вариант функции IndexRegExI() без учета регистра. |

## Когда это следует использовать

Эта функция может использоваться в следующих случаях:

* Определение, где в больших объемах текста встречаются специфические текстовые шаблоны. Например, может потребоваться узнать, где шаблон адреса электронной почты используется в серии длинных электронных сообщений.

* Функция IndexRegEx() особенно полезна для расширенной обработки данных и обычно используется на первом этапе более длительного и сложного преобразования. Обычно проще решать задачи с помощью других функций regex, таких как ExtractRegEx(), MatchRegEx() и CountRegEx(), но могут быть случаи, когда IndexRegEx() предлагает решения, которые не могут обеспечить эти функции.

## Пример 1: скрипт загрузки для идентификации книг по ISBN

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegEx.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Таблица с именем `ISBN`, которая содержит текст сообщения электронной почты в поле с именем `EmailBody`.

Требуется найти позиции всех 13-значных кодов ISBN в тексте на естественном языке в сообщении электронной почты.

Скрипт загрузки

```
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';

ISBN:
LOAD IndexRegEx(EmailText,'$(ISBN_RegEx)',1) AS ISBNCode1,
IndexRegEx(EmailText,'$(ISBN_RegEx)',2) AS ISBNCode2,
IndexRegEx(EmailText,'$(ISBN_RegEx)',3) AS ISBNCode3,
* INLINE `
EmailText
Hi there! I have some books that I'm interested in ordering from your distribution center. Just wanted to make sure they were in stock before I put the order in on the system - do you think you could tell me whether you have these in stock, and how many you might be able to ship us? Thanks! Item 1: ISBN 123-3-1234-1234-0. This is one I've had a really hard time getting a hold of lately. Do you think you would have 5 in stock? If not, can I put a hold on the next 5 you get? Item 2: ISBN 012-2-0123-0123-4 ... This one is not high-priority, but if you have one, I'll take it! Item 3: ISBN 000-1-0123-0123-2. Customers have been requesting this one for a long time, and we haven't had it in stock for years due to it being out of print. Any chance you might have 7 of them? Thanks!
` (delimiter is '/t/';
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `ISBNCode1`

* `ISBNCode2`

* `ISBNCode3`

Результирующая таблица

| ISBNCode1 | ISBNCode2 | ISBNCode3 |
| --- | --- | --- |
| 301 | 487 | 588 |

## Пример 2: выражение диаграммы для идентификации контактов с дополнительными телефонными номерами

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegEx.htm)

#### Выражение диаграммы и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Таблица с именем `BusinessContactInfo`, содержащая информацию о компаниях, которая была найдена на веб-сайте каждой компании.

* `ContactInfo` ― это поле, содержащее телефонные номера компаний. Требуется определить, у каких компаний есть несколько телефонных номеров.

Требования:

* Телефонные номера должны быть телефонными номерами стандарта NANP (Североамериканский план телефонной нумерации), состоящими из 10 цифр.

* Требуется разрешить заключение код региона в скобки.

* Требуется разрешить один пробел или дефис между каждым сегментом телефонного номера.

Скрипт загрузки

```
BusinessContactInfo:

Load * Inline `
ID	CompanyName	ContactInfo
1	Company A	(123) 456-7890 (023) 123-4567
2	Company B	0123456790 1357913579 0246802468
3	Company C	234-567-8901

` (delimiter is '\t');
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:

* `CompanyName`

Добавьте это вычисляемое измерение в таблицу:

```
=if(IndexRegEx(ContactInfo, '\({0,1}[0-9]{3}\){0,1}[ -]{0,1}[0-9]{3}[ -]{0,1}[0-9]{4}', 2)=0, 'No secondary phone number(s)', 'Has secondary phone number(s)')
```

Результирующая таблица

| CompanyName | =if(IndexRegEx(ContactInfo, '\({0,1}[0-9]{3}\){0,1}[ -]{0,1}[0-9]{3}[ -]{0,1}[0-9]{4}', 2)=0, 'No secondary phone number(s)', 'Has secondary phone number(s)') |
| --- | --- |
| Company A | Has secondary phone number(s) |
| Company B | Has secondary phone number(s) |
| Company C | No secondary phone number(s) |

`Company A` имеет один дополнительный телефонный номер. `Company B` имеет два дополнительных телефонных номера. `Company C` имеет три дополнительных телефонных номера.

Примечание к информацииФункция MatchRegEx() также полезна для следующих случаев проверки.

## Подробнее

* [Работа с регулярными выражениями в скриптах загрузки и выражениях диаграммы](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)