# IndexRegEx – função de script e gráfico

IndexRegEx() pesquisa a string de entrada e retorna a posição inicial da enésima ocorrência do padrão de expressão regular especificado. Um terceiro argumento opcional count fornece o valor de n, que é 1 se for omitido. As posições na string são numeradas da esquerda para a direita, de 1 para cima. Se nenhuma correspondência for encontrada, a função retornará 0.

Essa função executa operações regex que diferenciam maiúsculas de minúsculas. Como alternativa, você pode usar a variante IndexRegExI() para realizar operações de regex sem distinção entre maiúsculas e minúsculas.

Sintaxe:

IndexRegEx (text, regex [, count])

Tipo de dados de retorno: inteiro

Argumentos

| Argumento | Descrição |
| --- | --- |
| text | O texto da string de entrada na qual você deseja procurar uma expressão regular. |
| regex | A expressão regular a ser usada para pesquisar a string de entrada. |
| count | O número da correspondência. Isso é útil quando várias correspondências para a expressão regular podem ser encontradas no texto. Por exemplo, especifique um valor de `4` para extrair a posição da quarta correspondência.<br><br>Este é um argumento opcional. O padrão é 1 se não for especificado. Você pode especificar um valor negativo para procurar correspondências da direita para a esquerda. |

Exemplos de funções

| Exemplo | Resultado |
| --- | --- |
| `IndexRegEx('abc123','[a-z][0-9]+')` | Retorna `3` (a posição inicial da primeira correspondência). |
| `IndexRegEx('abc123','[a-z][0-9]+',2)` | Retorna `0` (a regex não tem uma segunda correspondência). |
| `IndexRegEx('ABC123','[a-z][0-9]+')` | Retorna `0`, porque IndexRegEx() diferencia maiúsculas de minúsculas. |
| `IndexRegExI('ABC123','[a-z][0-9]+')` | Retorna `3`. A variante da função que não diferencia maiúsculas de minúsculas, IndexRegExI(), é usada. |

## Quando usar

Os casos de uso dessa função incluem:

* Identificar onde padrões de texto específicos ocorrem em corpos maiores de texto. Por exemplo, você pode querer saber onde um padrão de endereço de e-mail é usado em uma série de mensagens de e-mail longas.

* IndexRegEx() é particularmente útil para o processamento avançado de dados e é comumente usado na primeira etapa de uma transformação mais longa e complexa. Em geral, é mais fácil resolver problemas com outras funções regex, como ExtractRegEx(), MatchRegEx() e CountRegEx(), mas pode haver ocasiões em que IndexRegEx() ofereça soluções que essas funções não podem oferecer.

## Exemplo 1 – script de carregamento para identificar livros por ISBN

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

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Uma tabela `ISBN` contendo o conteúdo da mensagem de e-mail em um campo chamado `EmailBody`.

Queremos encontrar as posições de todos os códigos ISBN de 13 dígitos na linguagem natural da mensagem de e-mail.

Script de carregamento

```
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/';
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `ISBNCode1`

* `ISBNCode2`

* `ISBNCode3`

Tabela de resultados

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

## Exemplo 2 – expressão de gráfico para identificar contatos com números de telefone secundários

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

#### Expressão e resultados do gráfico

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.

O script de carregamento contém:

* Uma tabela chamada `BusinessContactInfo`, que contém informações sobre empresas que foram encontradas no site de cada empresa.

* `ContactInfo` é um campo que contém números de telefone da empresa. Queremos determinar quais empresas têm vários números de telefone disponíveis.

Nossos requisitos:

* Números de telefone devem ser números de telefone da NANP com 10 dígitos.

* Queremos permitir que o código de área seja colocado entre colchetes.

* Queremos permitir um único espaço em branco ou hífen entre cada segmento de um número de telefone.

Script de carregamento

```
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');
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão:

* `CompanyName`

Adicione esta dimensão calculada à tabela:

```
=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)')
```

Tabela de resultados

| 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` tem um número de telefone secundário. `Company B` tem dois números de telefone secundários. `Company C` tem três números de telefone secundários.

Nota informativaA função MatchRegEx() também é útil para esses tipos de casos de uso de validação.

## Saiba mais

* [Trabalhando com expressões regulares em scripts de carregamento e expressões de gráfico](https://help.qlik.com/pt-BR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)