# IndexRegExGroup - Skript- und Diagrammfunktion

IndexRegExGroup() durchsucht den Eingabestring und gibt die Anfangsposition des n-ten Vorkommens des Musters für den angegebenen zusammengesetzten regulären Ausdruck zurück. Ein optionales viertes Argument count liefert den Wert von n. Erfolgt keine Eingabe, wird 1 verwendet. Die Positionen im String werden von links nach rechts beginnend mit 1 aufsteigend nummeriert. Wenn keine Übereinstimmung gefunden wird, gibt die Funktion 0 zurück.

Diese Funktion führt Regex-Vorgänge durch, bei denen die Groß- und Kleinschreibung beachtet wird. Sie können alternativ die Variante IndexRegExGroupI() verwenden, um Regex-Vorgänge ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen.

Syntax:

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

Rückgabe Datentyp: ganze Zahl

Argumente

| Argument | Beschreibung |
| --- | --- |
| text | Der Text des Eingabestrings, in dem Sie nach einem regulären Ausdruck suchen möchten. |
| regex | Der reguläre Ausdruck, der für die Suche im Eingabestring verwendet werden soll. |
| group | Die Nummer der Gruppe, im Fall eines zusammengesetzten regulären Ausdrucks.<br><br>Ein Wert für group von `0` gibt den Index des gesamten Regex zurück. Wenn der reguläre Ausdruck jedoch nur den Index der gesamten Übereinstimmung zurückgeben muss, verwenden Sie stattdessen die Funktion IndexRegEx().<br><br>Sie können einen negativen Wert für group angeben, um nach Übereinstimmungen von rechts nach links zu suchen. |
| count | Die Nummer der Übereinstimmung. Dies ist nützlich, wenn im Text mehrere Übereinstimmungen mit dem regulären Ausdruck gefunden werden können. Geben Sie zum Beispiel den Wert `4` an, um nach der Position der vierten Übereinstimmung zu suchen.<br><br>Dies ist ein optionales Argument. Standardwert ist 1, wenn nicht angegeben. Sie können einen negativen Wert angeben, um nach Übereinstimmungen von rechts nach links zu suchen. |

Funktionsbeispiele

| Beispiel | Ergebnis |
| --- | --- |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',0)` | Gibt `3` zurück (die Startposition des vollständigen Regex). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',1)` | Gibt `3` zurück (die Startposition der ersten Gruppe). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',2)` | Gibt `4` zurück (die Startposition der zweiten Gruppe). In dem Regex-Muster der Eingabe entspricht der String `([0-9]+)` der zweiten Gruppe. |
| `IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)` | Gibt `0` zurück, da IndexRegExGroup() zwischen Groß- und Kleinschreibung unterscheidet. |
| `IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)` | Liefert `3`. Die Variante IndexRegExI() der Funktion ohne Berücksichtigung von Groß- und Kleinschreibung wird verwendet. |

## Verwendung

Zu den Anwendungsfällen für diese Funktion gehören:

* Erkennen, wo bestimmte Textmuster in größeren Textmengen vorkommen. Sie könnten zum Beispiel wissen wollen, wo die Domäne einer E-Mail-Adresse in einer Reihe von langen E-Mail-Nachrichten verwendet wird.

* IndexRegExGroup() ist besonders nützlich für die fortgeschrittene Datenverarbeitung und wird in der Regel im ersten Schritt einer längeren, komplexeren Umwandlung verwendet. Normalerweise ist es einfacher, Probleme mit anderen Regex-Funktionen wie ExtractRegExGroup(), MatchRegEx() und CountRegEx() zu lösen, aber es kann vorkommen, dass IndexRegExGroup() Lösungen bietet, die diese Funktionen nicht bieten können.

## Beispiel 1 – Ladeskript zur Ermittlung der Positionen von ISBN-Komponenten

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Die Erstellung einer Variablen (`ISBN_RegEx`) zum Speichern des regulären Ausdrucks, den wir für alle Extraktionen verwenden wollen.
* Eine Reihe von ISBN-Codes für Bücher, die eine Buchhandlung bei mehreren Lieferanten bestellen möchte.

Für jeden ISBN-Code müssen wir die Startposition jedes der folgenden Elemente extrahieren:

* EAN

* Gruppe

* Registrant

* Veröffentlichung

* Prüfsumme

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Ergebnistabelle

| 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 diesem Fall enthält jedes Buch Komponenten an den gleichen Positionen.

## Beispiel 2 – Diagrammformeln zum Auffinden von URL-Positionen (mit IndexRegEx()-Vergleich)

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

#### Diagrammformeln und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Eine Tabelle mit dem Namen `Correspondence`, die den Text einer E-Mail-Nachricht in einem Feld mit dem Namen `EmailBody` enthält.

* Inhalt einer E-Mail-Nachricht, die Web-URLs enthält.

Wir möchten die Position der zweiten URL ermitteln, falls vorhanden, sowie die Positionen der folgenden Komponenten:

* Domäne

* Pfad

Wir möchten einen einzigen regulären Ausdruck verwenden, um alle Vorgänge zu steuern.

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie dieses Feld als Dimension hinzu:

* `ID`

Fügen Sie die folgenden dynamischen Dimensionen hinzu:

* URL 2 – Position:

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

* URL 2 – Domänenposition:

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

* URL 2 – Pfadposition:

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

Ergebnistabelle

| ID | URL 2 – Position | URL 2 – Domänenposition | URL 2 – Pfadposition |
| --- | --- | --- | --- |
| 1 | 274 | 281 | 295 |
| 2 | 0 | 0 | 0 |
| 3 | 298 | 306 | 327 |

IndexRegEx() gibt die Startposition der gesamten URL zurück, während IndexRegExGroup() Startpositionen von einzelnen Teilen der URL zurückgibt, die dem von uns verwendeten Wert für group entsprechen. Der Datensatz mit einem Wert für `ID` von 2 enthält nur eine URL, daher werden Werte von 0 zurückgegeben.

In allen Diagrammformeln wird derselbe reguläre Ausdruck verwendet, um verschiedene Informationen zurückzugeben. Eine Aufschlüsselung der im regulären Ausdruck definierten Gruppen sieht wie folgt aus.

Gruppen im regulären Ausdruck

| Gruppennummer | Regulärer Ausdruck | URL-Teil |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protokoll |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Domäne (Gruppen 3, 4 und 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Stammdomäne |
| 4 | ([a-zA-Z0-9]+) | Domäne der obersten Ebene |
| 5 | ([a-zA-Z0-9]+) | Pfad (Gruppen 7, 8, 9 und 10) (optional) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Unterverzeichnis |
| 7 | (\/[a-zA-Z0-9]+)\* | Datei (Gruppen 9 und 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | Datei |
| 9 | ([a-zA-Z0-9]+) | Dateiname |
| 10 | (\.[a-zA-Z0-9]+)? | Dateierweiterung (optional) |

## Weitere Informationen

* [Arbeiten mit regulären Ausdrücken in Ladeskripten und Diagrammformeln](https://help.qlik.com/de-DE/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)