# IndexRegEx Fonction de script et de graphique

IndexRegEx() effectue une recherche dans la chaîne d'entrée et renvoie la position de départ de la énième occurrence du modèle d'expression régulière spécifié. Un troisième argument facultatif count fournit la valeur de n, qui est égale à 1 s'il est omis. Les positions dans la chaîne sont numérotées de gauche à droite à partir de 1. Si aucune correspondance n'est trouvée, la fonction renvoie 0.

Cette fonction effectue des opérations de regex sensibles à la casse. Sinon, vous pouvez utiliser la variante IndexRegExI() pour effectuer des opérations de regex non sensibles à la casse.

IndexRegEx (text, regex [, count])

integer

Arguments

| Argument | Description |
| --- | --- |
| text | Texte de chaîne d'entrée dans lequel rechercher une expression régulière. |
| regex | Expression régulière à utiliser pour la recherche dans la chaîne d'entrée. |
| count | Numéro de la correspondance. Cela s'avère utile lorsqu'il est possible de trouver plusieurs correspondances pour l'expression régulière dans le texte. Par exemple, spécifiez une valeur `4` pour extraire la position de la quatrième correspondance.<br><br>Cet argument est facultatif. S'il n'est pas spécifié, la valeur par défaut est 1. Vous pouvez spécifier une valeur négative pour rechercher des correspondances de droite à gauche. |

Exemples de fonction

| Exemple | Résultat |
| --- | --- |
| `IndexRegEx('abc123','[a-z][0-9]+')` | Renvoie `3` (la position de départ de la première correspondance). |
| `IndexRegEx('abc123','[a-z][0-9]+',2)` | Renvoie `0` (la regex n'a pas de deuxième correspondance). |
| `IndexRegEx('ABC123','[a-z][0-9]+')` | Renvoie `0`, car IndexRegEx() est sensible à la casse. |
| `IndexRegExI('ABC123','[a-z][0-9]+')` | Renvoie `3`. La variante non sensible à la casse de la fonction, IndexRegExI(), est utilisée. |

## Cas d'utilisation

Les cas d'utilisation de cette fonction sont les suivants :

* Identification de l'endroit où se trouvent des modèles de texte spécifiques dans des corps de texte plus volumineux. Par exemple, vous pourriez vouloir savoir où un modèle d'adresse e-mail est utilisé dans une série de longs messages e-mail.

* IndexRegEx() s'avère particulièrement utile pour le traitement de données avancé et est couramment utilisé dans la première étape d'une transformation plus longue et plus complexe. Il est généralement plus facile de résoudre les problèmes avec d'autres fonctions de regex telles que ExtractRegEx(), MatchRegEx() et CountRegEx(), mais il peut arriver que IndexRegEx() offre des solutions que ces fonctions ne peuvent pas fournir.

## Exemple 1 – Script de chargement permettant d'identifier des livres par ISBN

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

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Tableau `ISBN` comportant le contenu de message e-mail dans un champ nommé `EmailBody`.

Nous voulons trouver les positions de tous les codes ISBN de 13 chiffres à partir du langage naturel du message e-mail.

Script de chargement

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

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `ISBNCode1`

* `ISBNCode2`

* `ISBNCode3`

Tableau de résultats

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

## Exemple 2 – Expression de graphique permettant d'identifier les contacts ayant des numéros de téléphone secondaires

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

#### Expression de graphique et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Tableau nommé `BusinessContactInfo` qui contient des informations sur les entreprises trouvées sur le site Internet de chacune d'entre elles.

* `ContactInfo` est un champ qui contient les numéros de téléphone d'entreprises. Nous voulons déterminer quelles sont les entreprises qui disposent de plusieurs numéros de téléphone.

Nos besoins :

* Les numéros de téléphone doivent être des numéros de téléphone NANP de 10 chiffres.

* Nous voulons permettre le placement entre parenthèse de l'indicatif régional.

* Nous voulons autoriser un seul espace vide ou trait d'union entre chaque segment d'un numéro de téléphone.

Script de chargement

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

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension :

* `CompanyName`

Ajoutez cette dimension calculée au tableau :

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

Tableau de résultats

| 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` a un numéro de téléphone secondaire. `Company B` a deux numéros de téléphone secondaires. `Company C` a trois numéros de téléphone secondaires.

Note InformationsLa fonction MatchRegEx() est également utile pour ces types de cas d'utilisation de validation.

## En savoir plus

* [Utilisation d'expressions régulières dans les scripts de chargement et les expressions de graphique](https://help.qlik.com/fr-FR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)