# IndexRegEx funkcja skryptu i funkcja wykresu

Funkcja IndexRegEx() przeszukuje wejściowy ciąg znaków i zwraca pozycję początkową n-tego wystąpienia podanego wzorca wyrażenia regularnego. Opcjonalny trzeci 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 IndexRegExI(), aby wykonywać operacje z wyrażeniami regularnymi bez rozróżniania wielkości liter.

Składnia:

IndexRegEx (text, regex [, 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. |
| 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 |
| --- | --- |
| `IndexRegEx('abc123','[a-z][0-9]+')` | Zwraca `3` (pozycja początkowa pierwszego dopasowania). |
| `IndexRegEx('abc123','[a-z][0-9]+',2)` | Zwraca `0` (wyrażenie regularne nie ma drugiego dopasowania). |
| `IndexRegEx('ABC123','[a-z][0-9]+')` | Zwraca `0`, ponieważ IndexRegEx() rozróżnia wielkość liter. |
| `IndexRegExI('ABC123','[a-z][0-9]+')` | 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 wzorzec adresu e-mail jest używany w serii długich wiadomości e-mail.

* Funkcja IndexRegEx() 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 ExtractRegEx(), MatchRegEx() i CountRegEx(), ale w pewnych sytuacjach IndexRegEx() oferuje rozwiązania, których te funkcje nie mogą zapewnić.

## Przykład 1 — skrypt ładowania do identyfikacji książek według ISBN

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

#### Skrypt ładowania i wyniki

Przegląd

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

Skrypt ładowania zawiera:

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

Chcemy znaleźć pozycje wszystkich 13-cyfrowych kodów ISBN w treści w języku naturalnym w wiadomości e-mail.

Skrypt ładowania

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

Wyniki

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

* `ISBNCode1`

* `ISBNCode2`

* `ISBNCode3`

Tabela wynikowa

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

## Przykład 2 — wyrażenie wykresu do identyfikacji kontaktów z dodatkowymi numerami telefonów

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

#### Wyrażenie 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 `BusinessContactInfo`, zawierająca informacje o firmach znalezione w witrynie internetowej każdej z nich.

* `ContactInfo` to pole zawierające firmowe numery telefonów. Chcemy ustalić, które firmy mają wiele dostępnych numerów telefonów.

Nasze wymagania:

* Numery telefonów muszą być numerami NANP składającymi się z 10 cyfr.

* Chcemy zezwolić na ujęcie numeru kierunkowego w nawiasy.

* Chcemy zezwolić na pojedynczą pustą spację lub myślnik między każdym segmentem numeru telefonu.

Skrypt ładowania

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

Wyniki

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

* `CompanyName`

Dodaj następujący wymiar wyliczany w tabeli:

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

Tabela wynikowa

| 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` ma jeden dodatkowy numer telefonu. `Company B` ma dwa dodatkowe numery telefonu. `Company C` ma trzy dodatkowe numery telefonu.

InformacjaFunkcja MatchRegEx() jest również przydatna w takich zastosowaniach sprawdzania poprawności.

## Dowiedz się więcej

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