# IndexRegExGroup — funkcja skryptu i funkcja wykresu

Funkcja IndexRegExGroup() przeszukuje wejściowy ciąg znaków i zwraca pozycję początkową n-tego wystąpienia podanego złożonego wzorca wyrażenia regularnego. Opcjonalny czwarty argument count dostarcza wartość n, która w przypadku pominięcia wynosi 1. Pozycje w ciągu znaków są numerowane od lewej do prawej od 1 w górę. Jeśli nie zostanie znalezione żadne dopasowanie, funkcja zwraca 0.

Funkcja ta wykonuje operacje z wyrażeniami regularnymi, w których rozróżniana jest wielkość liter. Zamiast tego można użyć wariantu IndexRegExGroupI(), aby wykonywać operacje z wyrażeniami regularnymi bez rozróżniania wielkości liter.

Składnia:

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

Typ zwracanych danych: liczba całkowita

Argumenty

| Argument | Opis |
| --- | --- |
| text | Tekst ciągu wejściowego, w którym ma być wyszukiwane wyrażenie regularne. |
| regex | Wyrażenie regularne używane do wyszukiwania w ciągu wejściowym. |
| group | Numer grupy w przypadku złożonego wyrażenia regularnego.<br><br>Wartość group równa `0` zwraca indeks całego wyrażenia regularnego. Jeśli jednak wyrażenie regularne ma zwracać tylko indeks całego dopasowania, należy użyć funkcji IndexRegEx().<br><br>Można określić ujemną wartość group, aby wyszukiwać dopasowania od prawej do lewej. |
| count | Numer dopasowania. Jest to przydatne, gdy w tekście można znaleźć wiele dopasowań do wyrażenia regularnego. Na przykład określ wartość `4`, aby wyodrębnić pozycję czwartego dopasowania.<br><br>Ten argument jest opcjonalny. Domyślnie 1, jeśli nie określono. Można określić ujemną wartość, aby wyszukiwać dopasowania od prawej do lewej. |

Przykłady funkcji

| Przykład | Wynik |
| --- | --- |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',0)` | Zwraca `3` (pozycja początkowa kompletnego wyrażenia regularnego). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',1)` | Zwraca `3` (pozycja początkowa pierwszej grupy). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',2)` | Zwraca `4`, co jest pozycją początkową drugiej grupy. W wejściowym wzorcu wyrażenia regularnego ciąg `([0-9]+)` odpowiada drugiej grupie. |
| `IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)` | Zwraca `0`, ponieważ IndexRegExGroup() rozróżnia wielkość liter. |
| `IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)` | Zwraca wartość `3`. Jest używany wariant funkcji IndexRegExI(), który nie uwzględnia wielkości liter. |

## Kiedy używać

Zastosowania tej funkcji są następujące:

* Identyfikacja miejsc występowania określonych wzorców tekstowych w większych fragmentach tekstu. Na przykład możesz chcieć się dowiedzieć, gdzie domena adresu e-mail jest używana w serii długich wiadomości e-mail.

* Funkcja IndexRegExGroup() jest szczególnie przydatna do zaawansowanego przetwarzania danych i powszechnie stosowana w pierwszym kroku dłuższej, bardziej złożonej transformacji. Zwykle łatwiej jest rozwiązywać problemy za pomocą innych funkcji wyrażeń regularnych, takich jak ExtractRegExGroup(), MatchRegEx() i CountRegEx(), ale w pewnych sytuacjach IndexRegExGroup() oferuje rozwiązania, których te funkcje nie mogą zapewnić.

## Przykład 1 — skrypt ładowania do znajdowania pozycji komponentów ISBN

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Utworzenie zmiennej, `ISBN_RegEx`, do przechowywania wyrażenia regularnego, którego chcemy użyć.
* Zestaw kodów ISBN książek, które księgarnia chce zamówić od kilku dostawców.

Dla każdego kodu ISBN musimy wyodrębnić pozycję początkową każdego z następujących elementów:

* EAN

* Grupa

* Rejestrujący

* Publikacja

* Suma kontrolna

Skrypt ładowania

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Tabela wynikowa

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

W tym przypadku każda książka zawiera komponenty na tych samych pozycjach.

## Przykład 2 — wyrażenia wykresu do wyszukiwania pozycji URL (z porównaniem IndexRegEx())

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

#### Wyrażenia wykresu i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Tabela o nazwie `Correspondence`, która zawiera tekst wiadomości e-mail w polu o nazwie `EmailBody`.

* Treść wiadomości e-mail zawierająca adresy URL stron internetowych.

Chcemy znaleźć pozycję drugiego adresu URL, jeśli jest obecny, a także pozycje następujących komponentów:

* Domena

* Ścieżka

Chcemy użyć pojedynczego wyrażenia regularnego do wykonania wszystkich operacji.

Skrypt ładowania

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar:

* `ID`

Dodaj następujące wymiary wyliczane:

* 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 Domain 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,2)
  ```

* URL 2 Path 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]+)?))?',6,2)
  ```

Tabela wynikowa

| ID | URL 2 Position | URL 2 Domain Position | URL 2 Path Position |
| --- | --- | --- | --- |
| 1 | 274 | 281 | 295 |
| 2 | 0 | 0 | 0 |
| 3 | 298 | 306 | 327 |

IndexRegEx() zwraca początkową pozycję całego adresu URL, podczas gdy IndexRegExGroup() zwraca początkowe pozycje poszczególnych części adresu URL, odpowiadające użytej wartości group. Rekord o wartości `ID` równej 2 zawiera tylko jeden adres URL, więc są zwracane wartości 0.

To samo wyrażenie regularne jest używane we wszystkich wyrażeniach wykresu do zwracania różnych informacji. Rozbicie grup zdefiniowanych w wyrażeniu regularnym wygląda następująco.

Grupy w wyrażeniu regularnym

| Numer grupy | Wyrażenie regularne | Część adresu URL |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protokół |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Domena (grupy 3, 4 i 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Domena główna |
| 4 | ([a-zA-Z0-9]+) | Domena najwyższego poziomu |
| 5 | ([a-zA-Z0-9]+) | Ścieżka (grupy 7, 8, 9 i 10 — opcjonalnie) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Podkatalog |
| 7 | (\/[a-zA-Z0-9]+)\* | Plik (grupy 9 i 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | Plik |
| 9 | ([a-zA-Z0-9]+) | Nazwa pliku |
| 10 | (\.[a-zA-Z0-9]+)? | Rozszerzenie pliku (opcjonalnie) |

## Dowiedz się więcej

* [Praca z wyrażeniami regularnymi w skryptach ładowania i wyrażeniach wykresu](https://help.qlik.com/pl-PL/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)