# IndexRegExGroup - Função de script e de gráfico

IndexRegExGroup() pesquisa a string de entrada e retorna a posição inicial da enésima ocorrência do padrão de expressão regular composta especificado. Um quarto 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 IndexRegExGroupI() para realizar operações de regex sem distinção entre maiúsculas e minúsculas.

Sintaxe:

IndexRegExGroup (text, regex, group [, 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. |
| group | O número do grupo, no caso de uma expressão regular composta.<br><br>Um valor para group de `0` retorna o índice de toda a regex. No entanto, se a expressão regular precisar retornar apenas o índice de toda a correspondência, use a função IndexRegEx().<br><br>Você pode especificar um valor negativo em group para pesquisar correspondências da direita para a esquerda. |
| 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 procurar 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 |
| --- | --- |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',0)` | Retorna `3` (posição inicial da regex completa). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',1)` | Retorna `3` (posição inicial do primeiro grupo). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',2)` | Retorna `4`, que é a posição inicial do segundo grupo. No padrão regex de entrada, a string `([0-9]+)` corresponde ao segundo grupo. |
| `IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)` | Retorna `0`, porque IndexRegExGroup() diferencia maiúsculas de minúsculas. |
| `IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)` | 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 o domínio de um endereço de e-mail é usado em uma série de mensagens de e-mail longas.

* IndexRegExGroup() é 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 ExtractRegExGroup(), MatchRegEx() e CountRegEx(), mas pode haver ocasiões em que IndexRegExGroup() ofereça soluções que essas funções não podem oferecer.

## Exemplo 1 – script de carregamento para encontrar as posições dos componentes do ISBN

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegExGroup.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:

* A criação de uma variável, `ISBN_RegEx`, para armazenar a expressão regular que queremos usar.
* Um conjunto de códigos ISBN para livros que uma livraria deseja encomendar de vários fornecedores.

Para cada código ISBN, precisamos extrair a posição inicial de cada um dos seguintes:

* EAN

* Grupo

* Registrante

* Publicação

* Checksum

Script de carregamento

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

ISBN:
LOAD Supplier,
IndexRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
IndexRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
IndexRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
IndexRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
IndexRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
```

Resultados

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

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Tabela de resultados

| Supplier | EAN | Group | Registrant | Publication | Checksum |
| --- | --- | --- | --- | --- | --- |
| Supplier 1 | 6 | 10 | 12 | 17 | 22 |
| Supplier 1 | 6 | 10 | 12 | 17 | 22 |
| Supplier 1 | 6 | 10 | 12 | 17 | 22 |
| Supplier 1 | 6 | 10 | 12 | 17 | 22 |
| Supplier 1 | 6 | 10 | 12 | 17 | 22 |
| Supplier 1 | 6 | 10 | 12 | 17 | 22 |
| Supplier 2 | 6 | 10 | 12 | 17 | 22 |
| Supplier 2 | 6 | 10 | 12 | 17 | 22 |
| Supplier 2 | 6 | 10 | 12 | 17 | 22 |
| Supplier 2 | 6 | 10 | 12 | 17 | 22 |
| Supplier 2 | 6 | 10 | 12 | 17 | 22 |
| Supplier 2 | 6 | 10 | 12 | 17 | 22 |

Nesse caso, cada livro contém componentes nas mesmas posições.

## Exemplo 2 – expressões de gráfico para encontrar posições de URL (com comparação de IndexRegEx())

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

#### Expressões 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 `Correspondence`, que contém o texto da mensagem de e-mail em um campo chamado `EmailBody`.

* Conteúdo de mensagem de e-mail que contém URLs da Web.

Queremos encontrar a posição da segunda URL, se houver, bem como as posições dos componentes a seguir:

* Domínio

* Caminho

Queremos usar uma única expressão regular para executar todas as operações.

Script de carregamento

```
Correspondence:

Load * Inline `
ID	EmailBody
1	Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2	Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3	Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!

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

Resultados

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

* `ID`

Adicione estas dimensões calculadas:

* Posição da URL 2:

  ```
  =IndexRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2)
  ```

* Posição do domínio da URL 2:

  ```
  =IndexRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2,2)
  ```

* Posição do caminho da URL 2:

  ```
  =IndexRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',6,2)
  ```

Tabela de resultados

| ID | Posição da URL 2 | Posição do domínio da URL 2 | Posição do caminho da URL 2 |
| --- | --- | --- | --- |
| 1 | 274 | 281 | 295 |
| 2 | 0 | 0 | 0 |
| 3 | 298 | 306 | 327 |

IndexRegEx() retorna a posição inicial de toda a URL, enquanto IndexRegExGroup() retorna posições iniciais de partes individuais da URL, correspondendo ao valor de group que usamos. O registro com um valor de `ID` de 2 contém apenas uma URL, portanto, valores 0 são retornados.

A mesma expressão regular é usada em todas as expressões de gráfico para retornar diferentes informações. A análise dos grupos definidos na expressão regular é a seguinte.

Grupos em expressão regular

| Número do grupo | Regex | Parte da URL |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protocolo |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Domínio (grupos 3, 4 e 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Domínio raiz |
| 4 | ([a-zA-Z0-9]+) | Domínio de nível superior |
| 5 | ([a-zA-Z0-9]+) | Caminho (grupos 7, 8, 9 e 10) (opcional) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Subdiretório |
| 7 | (\/[a-zA-Z0-9]+)\* | Arquivo (grupos 9 e 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | Arquivo |
| 9 | ([a-zA-Z0-9]+) | Nome do arquivo |
| 10 | (\.[a-zA-Z0-9]+)? | Extensão do arquivo (opcional) |

## Saiba mais

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