# IndexRegExGroup 스크립트 및 차트 함수

IndexRegExGroup()은 입력 문자열을 검색하여 지정된 복합 정규 표현식 패턴의 n번째 발생의 시작 위치를 반환합니다. 선택 사항인 네 번째 인수 count는 n의 값을 제공하며 생략하면 1이 됩니다. 문자열의 위치는 왼쪽에서 오른쪽으로 1부터 번호가 매겨집니다. 일치하는 항목이 없으면 함수는 0을 반환합니다.

이 함수는 대/소문자를 구분하는 정규식 연산을 수행합니다. 또는 IndexRegExGroupI() 변형을 사용하여 대/소문자를 구분하지 않는 정규식 작업을 수행할 수 있습니다.

구문:

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

반환 데이터 유형: 정수

인수

| 인수 | 설명 |
| --- | --- |
| text | 정규 표현식을 검색하려는 입력 문자열 텍스트. |
| regex | 입력 문자열을 검색하는 데 사용하는 정규 표현식. |
| group | 합성 정규 표현식의 경우 그룹의 번호.<br><br>group의 `0` 값은 전체 정규식의 인덱스를 반환합니다. 그러나 정규 표현식이 전체 일치 항목의 인덱스만 반환하면 되는 경우에는 대신 IndexRegEx() 함수를 사용합니다.<br><br>오른쪽에서 왼쪽으로 일치 항목을 검색하려면 음수 group 값을 지정할 수 있습니다. |
| count | 일치 항목의 번호. 이 기능은 정규 표현식과 일치하는 항목이 텍스트에서 여러 개 발견될 때 유용합니다. 예를 들어, 네 번째 일치 항목의 위치를 검색하려면 `4` 값을 지정합니다.<br><br>이는 선택적인 인수입니다. 지정하지 않으면 기본값은 1입니다. 오른쪽에서 왼쪽으로 일치 항목을 검색하려면 음수 값을 지정할 수 있습니다. |

함수 예

| 예제 | 결과 |
| --- | --- |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',0)` | `3`을 반환합니다(전체 정규식의 시작 위치). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',1)` | `3`을 반환합니다(첫 번째 그룹의 시작 위치). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',2)` | `4`을 반환합니다(두 번째 그룹의 시작 위치). 입력 정규식 패턴에서 문자열 `([0-9]+)`는 두 번째 그룹에 해당합니다. |
| `IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)` | `0`을 반환합니다(IndexRegExGroup()은 대/소문자를 구분함). |
| `IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)` | `3`을 반환합니다. 대/소문자를 구분하지 않는 함수 변형인 IndexRegExI()이 사용됩니다. |

## IndexRegExGroup를 사용하는 경우

이 함수의 사용 사례는 다음과 같습니다.

* 큰 텍스트 본문 내에서 특정 텍스트 패턴이 나타나는 위치를 식별합니다. 예를 들어, 일련의 긴 이메일 메시지에서 이메일 주소의 도메인이 어디에 사용되는지 알려고 할 수 있습니다.

* IndexRegExGroup()는 특히 고급 데이터 처리에 유용하며 일반적으로 더 길고 복잡한 변환의 첫 번째 단계에서 사용됩니다. 일반적으로 ExtractRegExGroup(), MatchRegEx(), CountRegEx()와 같은 다른 정규식 함수를 사용하면 문제를 해결하는 것이 더 쉽지만 IndexRegExGroup()가 이러한 함수가 제공할 수 없는 솔루션을 제공하는 경우가 있을 수 있습니다.

## 예 1 – ISBN 구성 요소의 위치를 찾기 위한 로드 스크립트

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

#### 로드 스크립트 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* 사용하려는 정규 표현식을 저장하기 위해 변수, `ISBN_RegEx`를 만듭니다.
* 서점이 여러 공급업체로부터 주문하고자 하는 책의 ISBN 코드 집합.

각 ISBN 코드에 대해 다음 각각의 시작 위치를 추출해야 합니다.

* EAN

* 그룹

* 등록자

* 출판

* 체크섬

로드 스크립트

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

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

결과 테이블

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

이 경우, 각 책에는 동일한 위치에 구성 요소가 들어 있습니다.

## 예 2 – URL 위치를 찾기 위한 차트 표현식(IndexRegEx() 비교 포함)

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

#### 차트 표현식 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* `Correspondence`라는 이름의 테이블에는 `EmailBody`라는 이름의 필드에 이메일 메시지 텍스트가 포함되어 있습니다.

* 웹 URL이 포함된 이메일 메시지 콘텐츠.

두 번째 URL이 있으면 그 위치와 다음 구성 요소의 위치를 찾으려고 합니다.

* 도메인

* 경로

모든 작업을 수행하기 위해 단일 정규 표현식을 사용하려고 합니다.

로드 스크립트

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

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 이 필드를 차원으로 추가합니다.

* `ID`

계산 차원을 추가합니다.

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

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

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

결과 테이블

| ID | URL 2 위치 | URL 2 도메인 위치 | URL 2 경로 위치 |
| --- | --- | --- | --- |
| 1 | 274 | 281 | 295 |
| 2 | 0 | 0 | 0 |
| 3 | 298 | 306 | 327 |

IndexRegEx()는 전체 URL의 시작 위치를 반환하는 반면, IndexRegExGroup()은 사용한 group 값에 해당하는 URL의 개별 부분의 시작 위치를 반환합니다. `ID` 값이 2인 레코드에는 URL이 하나만 포함되어 있으므로 값 0이 반환됩니다.

모든 차트 표현식에서 동일한 정규 표현식을 사용하여 서로 다른 정보를 반환합니다. 정규 표현식에 정의된 그룹의 분할은 다음과 같습니다.

정규 표현식의 그룹

| 그룹 번호 | 정규식 | URL 부분 |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | 프로토콜 |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | 도메인(그룹 3, 4 및 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | 루트 도메인 |
| 4 | ([a-zA-Z0-9]+) | 최상위 도메인 |
| 5 | ([a-zA-Z0-9]+) | 경로(그룹 7, 8, 9 및 10)(선택 사항) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | 하위 디렉터리 |
| 7 | (\/[a-zA-Z0-9]+)\* | 파일(그룹 9 및 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | 파일 |
| 9 | ([a-zA-Z0-9]+) | 파일 이름 |
| 10 | (\.[a-zA-Z0-9]+)? | 파일 확장자(선택 사항) |

## 자세한 정보

* [로드 스크립트 및 차트 표현식에서 정규식 작업](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)