Early Access: The content on this website is provided for informational purposes only in connection with pre-General Availability Qlik Products. All content is subject to change and is provided without warranty.
IndexRegExGroup()은 입력 문자열을 검색하여 지정된 복합 정규 표현식 패턴의 n번째 발생의 시작 위치를 반환합니다. 선택 사항인 네 번째 인수 count는 n의 값을 제공하며 생략하면 1이 됩니다. 문자열의 위치는 왼쪽에서 오른쪽으로 1부터 번호가 매겨집니다. 일치하는 항목이 없으면 함수는 0을 반환합니다.
이 함수는 대/소문자를 구분하는 정규식 연산을 수행합니다. 또는 IndexRegExGroupI() 변형을 사용하여 대/소문자를 구분하지 않는 정규식 작업을 수행할 수 있습니다.
구문:
IndexRegExGroup
(text, regex, group [, count])
반환 데이터 유형: 정수
인수
인수
설명
text
정규 표현식을 검색하려는 입력 문자열 텍스트.
regex
입력 문자열을 검색하는 데 사용하는 정규 표현식.
group
합성 정규 표현식의 경우 그룹의 번호.
group의 0 값은 전체 정규식의 인덱스를 반환합니다. 그러나 정규 표현식이 전체 일치 항목의 인덱스만 반환하면 되는 경우에는 대신 IndexRegEx() 함수를 사용합니다.
오른쪽에서 왼쪽으로 일치 항목을 검색하려면 음수 group 값을 지정할 수 있습니다.
count
일치 항목의 번호. 이 기능은 정규 표현식과 일치하는 항목이 텍스트에서 여러 개 발견될 때 유용합니다. 예를 들어, 네 번째 일치 항목의 위치를 검색하려면 4 값을 지정합니다.
이는 선택적인 인수입니다. 지정하지 않으면 기본값은 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()는 특히 고급 데이터 처리에 유용하며 일반적으로 더 길고 복잡한 변환의 첫 번째 단계에서 사용됩니다. 일반적으로 ExtractRegExGroup(), MatchRegEx(), CountRegEx()와 같은 다른 정규식 함수를 사용하면 문제를 해결하는 것이 더 쉽지만 IndexRegExGroup()가 이러한 함수가 제공할 수 없는 솔루션을 제공하는 경우가 있을 수 있습니다.
예 1 – ISBN 구성 요소의 위치를 찾기 위한 로드 스크립트
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
사용하려는 정규 표현식을 저장하기 위해 변수, 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() 비교 포함)
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
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');