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

MatchRegEx() сравнивает входную строку (text) с одним или несколькими регулярными выражениями (regex). Она возвращает числовое Местоположение шаблонов регулярных выражений, которые совпадают. Возвращает ответ о совпадении только в том случае, если оценка регулярного выражения соответствует всему текстовому вводу. Если совпадения не найдены, функция возвращает 0.

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

Синтаксис:

MatchRegEx (text, regex1 [ , regex2,...regexN])

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Текст входной строки, который требуется сопоставить с одним или несколькими регулярными выражениями. Для совпадения эта входная строка должна точно совпадать с шаблоном regex. |
| regex | Регулярное выражение, с которым нужно попытаться сопоставить входную строку. Можно указать несколько регулярных выражений в одном выражении, разделив их как последовательные аргументы. |

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

| Пример | Результат |
| --- | --- |
| `MatchRegEx('testSample','test')` | Возвращает `0`. Функция возвращает ответ о совпадении только тогда, когда есть точное совпадение между text и шаблоном regex. Несмотря на то, что `testSample` содержит `test`, оно содержит другой текст (`Sample`), что предотвращает точное совпадение. |
| `MatchRegEx('abc123','[a-z]','[0-9]','[a-z]+[0-9]+','.+')` | Возвращает `3`. Третий шаблон регулярного выражения является первым, который соответствует данным. |
| `MatchRegEx('ABC','[abc]+','[123]')` | Возвращает `0`, поскольку MatchRegEx() учитывает регистр. |
| `MatchRegExI('ABC','[abc]+','[123]')` | Возвращает `1`. Используется вариант функции MatchRegExI() без учета регистра. |

## Когда использовать MatchRegEx

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

* Проверка текста на соблюдение стандартов форматирования и соответствия, а также выявление ошибок в данных.

* Выявление различий в форматировании текста. Например, можно определить, сколько телефонных номеров используют формат A, формат B и т. д.

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

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

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

Обзор

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

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

* Таблица `BusinessContactInfo`, содержащая номера контактных телефонов для различных предприятий. Номера телефонов ― это 10-значные телефонные номера стандарта NANP (Североамериканский план телефонной нумерации).

* Вычисляемое поле `PhoneNumberFormat` для оценки соответствия каждого телефонного номера одному из определенного набора форматов телефонных номеров.

Есть три различных формата, которые требуется проверить: (###) ###-####, ###-###-#### и ##########.

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

```
BusinessContactInfo:

Load MatchRegEx(ContactInfo,'\({0,1}[0-9]{3}\) [0-9]{3}-[0-9]{4}', '[0-9]{3}-[0-9]{3}-[0-9]{4}', '[0-9]{10}') as PhoneNumberFormat,
* Inline `
ID	CompanyName	ContactInfo
1	Company A	(123) 456-7890
2	Company B	0123456790
3	Company C	234-567-8901
4	Company D	(024) 680-2456
5	Company E	(135) 791-3579
6	Company F	8901234567
7	Company G	235-235-2352
8	Company H	(555) (555) (5555)
9	Company I	2342342343
10	Company J	444-444-4444
` (delimiter is '\t');
```

Результаты

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

* `CompanyName`

* `ContactInfo`

* `PhoneNumberFormat`

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

| CompanyName | ContactInfo | PhoneNumberFormat |
| --- | --- | --- |
| Company A | (123) 456-7890 | 1 |
| Company B | 0123456790 | 3 |
| Company C | 234-567-8901 | 2 |
| Company D | (024) 680-2456 | 1 |
| Company E | (135) 791-3579 | 1 |
| Company F | 8901234567 | 3 |
| Company G | 235-235-2352 | 2 |
| Company H | (555) (555) (5555) | 0 |
| Company I | 2342342343 | 3 |
| Company J | 444-444-4444 | 2 |

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

Примеры выражений агрегирования для подсчета повторений каждого формата

| Формат | Количество экземпляров | Выражение диаграммы |
| --- | --- | --- |
| (###) ###-#### | 3 | =Count({&lt;PhoneNumberFormat={'1'}&gt;} PhoneNumberFormat) |
| ###-###-#### | 3 | =Count({&lt;PhoneNumberFormat={'2'}&gt;} PhoneNumberFormat) |
| ########## | 3 | =Count({&lt;PhoneNumberFormat={'3'}&gt;} PhoneNumberFormat) |
| Unrecognized format | 1 | =Count({&lt;PhoneNumberFormat={'0'}&gt;} PhoneNumberFormat) |

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

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

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

Обзор

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

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

* Таблица `Books`, в которой перечислены коды ISBN для различных книг.

Из этих данных требуется определить, является ли каждый код ISBN допустимым 10-значным или 13-значным кодом, основываясь на синтаксисе, указанном в шаблоне регулярного выражения.

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

```
Books:

Load * Inline [
Book
ISBN 123-3-1234-1234-0
ISBN 012-2-0123-0123-4
ISBN 000-1-0123-0123-2
ISBN 0-111-23456-7
ISBN 555-2-5555-5555-3
ISBN 222-4-2222-2222-2
ISBN 1-901-23456-8
ISBN 333-3-3333-3333-3
ISBN 555-1-5151-5151-3
ISBN 232-1-2323-2323-1
ISBN 2-444-44444-4
ISBN 888-0-9999-0000-0
];
```

Результаты

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

* `Book`

Добавьте это вычисляемое измерение и присвойте ему метку ISBN Format:

```
=if(MatchRegEx(Book, 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})', 'ISBN[ ]*([0-9]{1})-([0-9]{3})-([0-9]{5})-([0-9]{1})')=1, '13-digit', 
	if(MatchRegEx(Book, 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})', 'ISBN[ ]*([0-9]{1})-([0-9]{3})-([0-9]{5})-([0-9]{1})')=2, '10-digit',
		'Invalid ISBN'))
```

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

| Book | ISBN Format |
| --- | --- |
| ISBN 000-1-0123-0123-2 | 13-digit |
| ISBN 0-111-23456-7 | 10-digit |
| ISBN 1-901-23456-8 | 10-digit |
| ISBN 2-444-44444-4 | 10-digit |
| ISBN 012-2-0123-0123-4 | 13-digit |
| ISBN 123-3-1234-1234-0 | 13-digit |
| ISBN 222-4-2222-2222-2 | 13-digit |
| ISBN 232-1-2323-2323-1 | 13-digit |
| ISBN 333-3-3333-3333-3 | 13-digit |
| ISBN 555-1-5151-5151-3 | 13-digit |
| ISBN 555-2-5555-5555-3 | 13-digit |
| ISBN 888-0-9999-0000-0 | 13-digit |

## Подробнее

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