# IndexRegEx 스크립트 및 차트 함수

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

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

구문:

IndexRegEx (text, regex [, count])

반환 데이터 유형: 정수

인수

| 인수 | 설명 |
| --- | --- |
| text | 정규 표현식을 검색하려는 입력 문자열 텍스트. |
| regex | 입력 문자열을 검색하는 데 사용하는 정규 표현식. |
| count | 일치 항목의 번호. 이 기능은 정규 표현식과 일치하는 항목이 텍스트에서 여러 개 발견될 때 유용합니다. 예를 들어, 네 번째 일치 항목의 위치를 추출하려면 `4` 값을 지정합니다.<br><br>이는 선택적인 인수입니다. 지정하지 않으면 기본값은 1입니다. 오른쪽에서 왼쪽으로 일치 항목을 검색하려면 음수 값을 지정할 수 있습니다. |

함수 예

| 예제 | 결과 |
| --- | --- |
| `IndexRegEx('abc123','[a-z][0-9]+')` | `3`을 반환합니다(첫 번째 일치 항목의 시작 위치). |
| `IndexRegEx('abc123','[a-z][0-9]+',2)` | `0`을 반환합니다(정규식에 두 번째 일치 항목이 없음). |
| `IndexRegEx('ABC123','[a-z][0-9]+')` | `0`을 반환합니다(IndexRegEx()은 대/소문자를 구분함). |
| `IndexRegExI('ABC123','[a-z][0-9]+')` | `3`을 반환합니다. 대/소문자를 구분하지 않는 함수 변형인 IndexRegExI()이 사용됩니다. |

## IndexRegEx를 사용하는 경우

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

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

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

## 예 1 – ISBN으로 책을 식별하기 위한 스크립트 로드

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

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

개요

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

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

* `EmailBody`라는 필드에 이메일 메시지 콘텐츠가 들어 있는 테이블 `ISBN`.

이메일 메시지에서 자연어로 된 모든 13자리 ISBN 코드의 위치를 찾으려고 합니다.

로드 스크립트

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

결과

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

* `ISBNCode1`

* `ISBNCode2`

* `ISBNCode3`

결과 테이블

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

## 예 2 – 보조 전화번호를 가진 연락처를 식별하기 위한 차트 표현식

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

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

개요

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

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

* 각 회사 웹사이트에서 찾은 회사에 대한 정보가 포함된 `BusinessContactInfo`라는 테이블입니다.

* `ContactInfo`는 회사 전화번호를 포함하는 필드입니다. 어떤 회사가 여러 개의 전화번호를 가지고 있는지 알아보려고 합니다.

요구 사항:

* 전화번호는 10자리의 NANP 전화번호여야 합니다.

* 지역 번호를 괄호로 묶을 수 있도록 하려고 합니다.

* 전화번호의 각 부분 사이에 하나의 공백이나 하이픈을 허용하려고 합니다.

로드 스크립트

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

결과

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

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

결과 테이블

| 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`에는 보조 전화번호가 1개 있습니다. `Company B`에는 보조 전화번호가 2개 있습니다. `Company C`에는 보조 전화번호가 3개 있습니다.

정보 메모MatchRegEx() 함수는 이러한 유형의 유효성 검사 사용 사례에도 유용합니다.

## 자세한 정보

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