# IndexRegExGroup Funzione per script e grafici

IndexRegExGroup() effettua una ricerca nella stringa di input e restituisce la posizione iniziale dell'occorrenza n-esima del modello di espressione regolare composita specificato. Un quarto argomento opzionale count fornisce il valore di n, che corrisponde a 1 se omesso. Le posizioni nella stringa sono numerate da sinistra a destra a partire dal valore 1 in poi. Se non viene trovata alcuna corrispondenza, la funzione restituisce 0.

Questa funzione esegue operazioni regex che distinguono tra maiuscole e minuscole. In alternativa, è possibile utilizzare la variante IndexRegExGroupI() per eseguire operazioni regex senza distinzione tra maiuscole e minuscole.

Sintassi:

IndexRegExGroup (text, regex, group [, count])

Tipo di dati restituiti: numero intero

Argomenti

| Argomento | Descrizione |
| --- | --- |
| text | Il testo della stringa di input in cui si desidera cercare un'espressione regolare. |
| regex | L'espressione regolare da utilizzare per la ricerca della stringa di input. |
| group | Il numero del gruppo, nel caso di un'espressione regolare composita.<br><br>Un valore group pari a `0` restituisce l'indice dell'intera regex. Tuttavia, se l'espressione regolare deve restituire solo l'indice dell'intera corrispondenza, utilizzare invece la funzione IndexRegEx().<br><br>È possibile specificare un valore group negativo per cercare le corrispondenze da destra a sinistra. |
| count | Il numero della corrispondenza. Questo è utile quando nel testo si possono trovare più corrispondenze per l'espressione regolare. Per esempio, specificare il valore `4` per cercare la posizione della quarta corrispondenza.<br><br>Questo argomento è facoltativo. Se non viene specificata, l'impostazione predefinita è 1. È possibile specificare un valore negativo per cercare le corrispondenze da destra a sinistra. |

Esempi di funzioni

| Esempio | Risultato |
| --- | --- |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',0)` | Restituisce `3` (posizione iniziale della regex completa). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',1)` | Restituisce `3` (posizione iniziale del primo gruppo). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',2)` | Restituisce `4`, che è la posizione iniziale del secondo gruppo. Nel modello regex di input, la stringa `([0-9]+)` corrisponde al secondo gruppo. |
| `IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)` | Restituisce `0`, perché IndexRegExGroup() fa distinzione tra maiuscole e minuscole. |
| `IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)` | Restituisce `3`. Viene utilizzata la variante senza distinzione tra maiuscole e minuscole della funzione, IndexRegExI(). |

## Quando usare IndexRegExGroup

I casi d'uso di questa funzione includono:

* Identificazione di dove si verificano modelli testuali specifici all'interno di corpi di testo più ampi. Ad esempio, potrebbe essere necessario sapere dove viene utilizzato il dominio di un indirizzo e-mail in una serie di lunghi messaggi e-mail.

* La funzione IndexRegExGroup() è particolarmente utile per l'elaborazione avanzata dei dati e viene comunemente utilizzata nella prima fase di una trasformazione più lunga e complessa. In genere, è più facile risolvere i problemi con altre funzioni regex come ExtractRegExGroup(), MatchRegEx() e CountRegEx(), ma a volte IndexRegExGroup() offre soluzioni che queste funzioni non possono fornire.

## Esempio 1 - script di caricamento per trovare le posizioni dei componenti ISBN

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

#### Script di caricamento e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* La creazione di una variabile, `ISBN_RegEx`, per memorizzare l'espressione regolare che si desidera utilizzare.
* Un set di codici ISBN per i libri che una libreria vuole ordinare da diversi fornitori.

Per ogni codice ISBN, è necessario estrarre la posizione iniziale di ciascuno dei seguenti elementi:

* EAN

* Gruppo

* Soggetto registrato

* Pubblicazione

* Checksum

Script di caricamento

```
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
];
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Tabella dei risultati

| 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 |

In questo caso, ogni libro contiene componenti nelle stesse posizioni.

## Esempio 2 - espressioni del grafico per trovare le posizioni dell'URL (con confronto con IndexRegEx() )

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

#### Espressione del grafico e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* Una tabella denominata `Correspondence`, che contiene il testo del messaggio e-mail in un campo denominato `EmailBody`.

* Contenuto del messaggio e-mail che contiene URL web.

Bisogna trovare la posizione del secondo URL, se presente, e le posizioni dei componenti seguenti:

* Dominio

* Percorso

Bisogna utilizzare un'unica espressione regolare per eseguire tutte le operazioni.

Script di caricamento

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

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere questo campo come dimensione:

* `ID`

Aggiungere le seguenti dimensioni calcolate:

* Posizione 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)
  ```

* Posizione dominio 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)
  ```

* Posizione percorso 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)
  ```

Tabella dei risultati

| ID | Posizione URL 2 | Posizione dominio URL 2 | Posizione percorso URL 2 |
| --- | --- | --- | --- |
| 1 | 274 | 281 | 295 |
| 2 | 0 | 0 | 0 |
| 3 | 298 | 306 | 327 |

IndexRegEx() restituisce la posizione iniziale dell'intero URL, mentre IndexRegExGroup() restituisce le posizioni iniziali di singole parti dell'URL, corrispondenti al valore group che è stato utilizzato. Il record con un valore per `ID` uguale a 2 contiene solo un URL, quindi vengono restituiti i valori 0.

La stessa espressione regolare viene utilizzata in tutte le espressioni dei grafici per restituire diverse informazioni. La scomposizione dei gruppi definiti nell'espressione regolare è la seguente.

Gruppi nell'espressione regolare

| Numero del gruppo | Regex | Parte URL |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protocollo |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Dominio (gruppi 3, 4 e 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Dominio radice |
| 4 | ([a-zA-Z0-9]+) | Dominio di primo livello |
| 5 | ([a-zA-Z0-9]+) | Percorso (gruppi 7, 8, 9 e 10) (opzionale) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Sottodirectory |
| 7 | (\/[a-zA-Z0-9]+)\* | File (gruppi 9 e 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | File |
| 9 | ([a-zA-Z0-9]+) | Nome file |
| 10 | (\.[a-zA-Z0-9]+)? | Estensione del file (opzionale) |

## Ulteriori informazioni

* [Lavorare con le espressioni regolari negli script di caricamento e nelle espressioni del grafico](https://help.qlik.com/it-IT/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)