IsMatch, Match 및 MatchAll 함수

적용 대상: 캔버스 앱 모델 기반 앱 Power Platform CLI

일치 여부를 테스트하거나 패턴을 기준으로 텍스트 문자열의 일부를 추출합니다.

설명

IsMatch 함수는 텍스트 문자열이 일반 문자, 미리 정의된 패턴 또는 정규식을 구성할 수 있는 패턴과 일치하는지 여부를 테스트합니다. MatchMatchAll 함수는 하위 일치를 포함하여 일치한 것을 반환합니다.

IsMatch를 사용하여 사용자가 Text input 컨트롤에 입력한 것의 유효성을 검사합니다. 예를 들어, 결과가 데이터 원본에 저장되기 전에 사용자가 유효한 이메일 주소를 입력했는지 여부를 확인할 수 있습니다. 항목이 조건과 일치하지 않는 경우 사용자에게 항목을 수정하도록 하는 다른 컨트롤을 추가합니다.

Match를 사용해 패턴과 일치하는 첫 번째 텍스트 문자열을 추출하고 MatchAll을 사용해 일치하는 모든 텍스트 문자열을 추출합니다. 하위 문자열을 추출하여 복잡한 문자열을 구문 분석할 수도 있습니다.

Match는 발견된 첫 번째 일치에 대한 정보 레코드를 반환하고 MatchAll은 발견된 모든 일치에 대한 레코드 테이블을 반환합니다. 레코드에는 다음이 포함됩니다.

Column Type Description
명명된 하위‑일치 또는 여러 하위‑일치 문자 각각의 명명된 하위 일치에는 고유한 열을 가집니다. 정규식에서 (?<name>...)을 사용하여 명명된 하위 일치를 만듭니다. 명명된 하위 일치의 이름이 사전 정의된 열 중 하나와 같으면(아래) 하위 일치가 우선하며 경고가 생성됩니다. 이 경고를 피하려면 하위 일치 이름을 바꿉니다.
FullMatch Text 일치한 모든 텍스트 문자열.
StartMatch 번호 입력 텍스트 문자열 내에서 일치의 시작 위치입니다. 문자열의 첫 번째 문자는 1을 반환합니다.
SubMatches 단일 열의 텍스트 테이블(열 Value) 명명된 하위 일치 및 명명되지 않은 하위 일치 테이블은 정규식에 나타나는 순서대로 일치합니다. 일반적으로 명명된 하위 일치는 작업하기가 쉽고 권장됩니다. ForAll 함수 또는 Last( FirstN( ... ) ) 함수를 사용해 개별 하위 일치에 대해 작업합니다. 정규식에 하위 일치가 정의되지 않은 경우 이 테이블은 존재하지만 비어 있습니다.

이 함수들은 MatchOptions를 지원합니다. 기본적으로:

  • 이 함수는 대소문자를 구분합니다. MatchOptions.IgnoreCase를 사용해 대소문자 일치를 수행합니다.
  • IsMatch는 전체 텍스트 문자열(Complete MatchOption)을 구분하고 MatchMatchAll 검색은 텍스트 문자열 포함(Contains MatchOption)을 구분합니다. Complete, Contains, BeginsWith, EndsWith를 시나리오에 적절히 사용할 수 있습니다.

IsMatch는 텍스트 문자열이 패턴과 일치하는 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다. MatchIsBlank 함수로 테스트할 수 있는 일치가 없는 경우 공백을 반환합니다. MatchAllIsEmpty 함수로 테스트할 수 있는 일치가 없는 경우 공백 테이블을 반환합니다.

MatchAll을 사용해 텍스트 문자열을 분리하는 대신 Split 함수로 더 간단하고 빠르게 사용할 수 있습니다.

패턴

이러한 함수를 사용하는 핵심은 일치시킬 패턴을 설명하는 것에 있습니다. 다음의 조합으로 텍스트 문자열에서 패턴을 설명합니다.

  • "abc" 또는 "123"과 같은 일반 문자
  • Letter, MultipleDigits 또는 Email과 같은 미리 정의된 패턴. (Match 열거는 이러한 패턴을 정의합니다.)
  • "\d+\s+\d+" 또는 "[a-z]+"와 같은 정규식 코드.

문자열 연결 연산자 &를 사용하여 이러한 요소를 결합합니다. 예를 들어, "abc" & Digit & "\s+"는 "a", "b" 및 "c", 그 뒤에 0~9의 숫자, 그 뒤에 최소 하나의 공백 문자가 오는 문자와 일치하는 유효한 패턴입니다.

일반 문자

가장 간단한 패턴은 정확히 일치되는 일반 문자의 시퀀스입니다.

예를 들어 IsMatch 함수가 사용될 때 문자열 "Hello"는 패턴 "Hello"와 정확히 일치합니다. 똑같아야 합니다. 문자열 "hello!" 끝에 느낌표가 있고 문자 "h"의 대소문자가 틀리기 때문에 패턴이 일치하지 않습니다. (이 동작을 수정하는 방법은 MatchOptions를 참조하십시오.)

패턴 언어에서 특정 문자는 특별한 용도로 예약되어 있습니다. 이러한 문자를 사용하려면 문자가 문자 그대로 해석되어야 하거나 미리 정의된 패턴 중 하나를 사용해야 함을 나타내도록 \(백슬래시)로 문자에 접두사를 덧붙여야 하며 자세한 설명은 이 토픽 후반에 나와 있습니다. 이 테이블은 특수 문자를 나열합니다.

특수 문자 설명
. 점 또는 마침표
? 물음표
* 별표
+ 더하기
( ) 괄호
[ ] 대괄호
{ } 중괄호
^ 캐럿
$ 달러 기호
| 세로 막대 또는 파이프
\ 백슬래시

예를 들어 "Hello?"와 일치시킬 수 있습니다. "Hello\?" 패턴을 사용하여 물음표 앞에 백슬래시가 있습니다.

미리 정의된 패턴

미리 정의된 패턴은 문자 집합 중 하나 또는 여러 문자의 시퀀스와 일치시키는 간단한 방법을 제공합니다. 문자열 연결 연산자 &를 사용하여 Match 열거의 구성원과 사용자 고유의 텍스트 문자열을 결합합니다.

일치 열거 설명 정규식
Any 문자와 일치합니다. .
Comma 쉼표와 일치합니다. ,
Digit 단일 숫자("0"부터 "9")와 일치합니다. \d
이메일 "at" 기호("@")를 포함하는 이메일 주소 및 점(".")을 포함하는 도메인 이름과 일치합니다. .+\@.+\\.[^\\.]{2,}
Hyphen 하이픈과 일치합니다. \-
LeftParen 왼쪽 괄호"("와 일치합니다. \(
Letter 문자와 일치합니다. \p{L}
MultipleDigits 하나 이상의 숫자와 일치합니다. \d+
MultipleLetters 하나 이상의 문자와 일치합니다. \p{L}+
MultipleNonSpaces 공백(공백, 탭, 줄 바꿈)을 추가하지 않는 하나 이상의 문자와 일치합니다. \S+
MultipleSpaces 공백(공백, 탭, 줄 바꿈)을 추가하는 하나 이상의 문자와 일치합니다. \s+
NonSpace 공백을 추가하지 않는 단일 문자와 일치합니다. \S
OptionalDigits 0개, 1개 또는 더 많은 숫자와 일치합니다. \d*
OptionalLetters 0개, 1개 또는 더 많은 문자와 일치합니다. \p{L}*
OptionalNonSpaces 공백을 추가하지 않는 0개, 1개 또는 더 많은 문자와 일치합니다. \S*
OptionalSpaces 공백을 추가하는 0개, 1개 또는 더 많은 문자와 일치합니다. \s*
Period 마침표 또는 점(".")과 일치합니다. \.
RightParen 오른쪽 괄호")"와 일치합니다. \)
Space 공백을 추가하는 문자와 일치합니다. \s
탭 문자와 일치합니다. \t

예를 들어, 패턴 "A" & MultipleDigits는 하나 이상의 숫자가 뒤에 오는 문자 "A"와 일치합니다.

정규식

이 함수들이 사용하는 패턴은 정규식입니다. 이 토픽 앞부분에 설명된 일반 문자 및 미리 정의된 패턴은 정규식을 작성하도록 돕습니다.

정규식은 매우 강력하고 여러 프로그래밍 언어에서 사용할 수 있으며 다양한 목적에 사용됩니다. 또한 종종 임의의 구두점 시퀀스처럼 보일 수 있습니다. 이 문서는 정규식의 모든 측면을 설명하지 않지만 풍부한 정보와 자습서가 사용자를 도울 수 있도록 웹에 게시됩니다.

정규식에는 서로 다른 방언이 있으며 Power Apps는 다양한 JavaScript 방언을 사용합니다. 구문 소개에 대해서는 정규식 구문을 참조하십시오. 명명된 하위 일치(명명된 캡처 그룹)가 지원됩니다.

  • 명명된 하위 일치: (?<name> ...)
  • 명명된 역 참조: \k<name>

이 토픽 앞부분의 Match 열거 테이블에서 각 열거는 해당 정규 표현식과 동일한 행에 나타납니다.

일치 옵션

문자열 연결 연산자(&)를 사용하여 결합할 수 있는 하나 이상의 옵션을 지정하여 이러한 함수들의 동작을 수정할 수 있습니다.

MatchOptions 열거 Description 정규식에 대한 영향
MatchOptions.BeginsWith 패턴은 텍스트의 시작 부분에서 일치해야 합니다. ^를 정규식의 시작 부분에 추가합니다.
MatchOptions.Complete IsMatch의 기본값. 패턴은 처음부터 끝까지 전체 텍스트 문자열과 일치해야 합니다. ^를 정규식의 시작 부분에 $를 끝 부분에 추가합니다.
MatchOptions.Contains MatchMatchAll의 기본값. 패턴은 텍스트의 어딘가에 나타나야 하지만 시작 또는 끝일 필요가 없습니다. 정규식을 수정하지 않습니다.
MatchOptions.EndsWith 패턴은 텍스트 문자열의 끝 부분에서 일치해야 합니다. $를 정규식의 끝 부분에 추가합니다.
MatchOptions.IgnoreCase 대문자와 소문자를 동일하게 취급합니다. 기본적으로 일치는 대/소문자 구분입니다. 정규식을 수정하지 않습니다. 이 옵션은 정규식의 표준 "i"수정 자와 같습니다.
MatchOptions.Multiline 여러 줄과 일치합니다. 정규식을 수정하지 않습니다. 이 옵션은 정규식의 표준 "g" 수정자와 같습니다.

MatchAll을 사용하는 것은 정규 표현식에 표준 "g" 수정자를 사용하는 것과 같습니다.

구문

IsMatch( Text, Pattern [, Options ] )

  • Text - 필수 항목입니다. 테스트할 텍스트 문자열입니다.
  • Pattern – 필수 항목입니다. 텍스트 문자열로 테스트할 패턴입니다. Match 열거가 정규식을 정의하거나 제공하는 미리 정의된 패턴을 연결합니다. 패턴은 앱이 실행될 때 변경되는 변수, 데이터 원본 또는 기타 동적 참조가 없는 상수 수식이어야 합니다.
  • Options – 선택 사항입니다. MatchOptions 열거 값의 텍스트 문자열 조합입니다. 기본적으로 MatchOptions.Complete가 사용됩니다.

Match( Text, Pattern [, Options ] )

  • Text - 필수 항목입니다. 일치할 텍스트 문자열입니다.
  • Pattern – 필수 항목입니다. 텍스트 문자열로 일치할 패턴입니다. Match 열거가 정규식을 정의하거나 제공하는 미리 정의된 패턴을 연결합니다. 패턴은 앱이 실행될 때 변경되는 변수, 데이터 원본 또는 기타 동적 참조가 없는 상수 수식이어야 합니다.
  • Options – 선택 사항입니다. MatchOptions 열거 값의 텍스트 문자열 조합입니다. 기본적으로 MatchOptions.Contains가 사용됩니다.

MatchAll( Text, Pattern [, Options ] )

  • Text - 필수 항목입니다. 일치할 텍스트 문자열입니다.
  • Pattern – 필수 항목입니다. 텍스트 문자열로 일치할 패턴입니다. Match 열거가 정규식을 정의하거나 제공하는 미리 정의된 패턴을 연결합니다. 패턴은 앱이 실행될 때 변경되는 변수, 데이터 원본 또는 기타 동적 참조가 없는 상수 수식이어야 합니다.
  • Options – 선택 사항입니다. MatchOptions 열거 값의 텍스트 문자열 조합입니다. 기본적으로 MatchOptions.Contains가 사용됩니다.

IsMatch 예시

일반 문자

앱에 TextInput1이라는 Text input 컨트롤이 포함되어 있다고 가정합니다. 사용자는 데이터베이스에 저장되도록 이 컨트롤에 값을 입력합니다.

사용자는 TextInput1Hello world를 입력합니다.

수식 설명 결과
IsMatch( TextInput1.Text, "Hello world" ) 사용자의 입력이 문자열 "Hello world"와 정확히 일치하는지 여부를 테스트합니다. true
IsMatch( TextInput1.Text, "Good bye" ) 사용자의 입력이 문자열 "Good bye"와 정확히 일치하는지 여부를 테스트합니다. false
IsMatch( TextInput1.Text, "hello", Contains ) 사용자의 입력이 단어 "hello"(대/소문자 구분)를 포함하는지 여부를 테스트합니다. false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) 사용자의 입력이 단어 "hello"(대/소문자 구분하지 않음)를 포함하는지 여부를 테스트합니다. true

미리 정의된 패턴

수식 설명 결과
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) 미국 사회 보장 번호와 일치합니다. true
IsMatch( "joan@contoso.com", Email ) 이메일 주소와 일치합니다. true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) 숫자, 마침표, 0개 이상의 숫자 시퀀스와 일치합니다. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) 숫자, 마침표, 0개 이상의 숫자 시퀀스와 일치합니다. 마침표가 일치할 텍스트에 표시되지 않으므로 이 패턴은 일치하지 않습니다. false

정규식

수식 설명 결과
IsMatch( "986", "\d+" ) 0보다 큰 정수와 일치합니다. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) 양수 통화 금액과 일치합니다. 입력에 소수점이 포함되는 경우 입력은 소수점 뒤에 두 개의 숫자도 포함해야 합니다. 예를 들어, 3.00은 유효하지만 3.1은 유효하지 않습니다. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) 양수 또는 음수 통화 금액과 일치합니다. 입력에 소수점이 포함되는 경우 입력은 소수점 뒤에 두 개의 숫자도 포함해야 합니다. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) 미국 사회 보장 번호와 일치합니다. 제공된 입력 필드의 형식, 유형 및 길이의 유효성을 검사합니다. 일치시킬 문자열은 3개의 숫자 뒤에 대시가 오고, 2개의 숫자 뒤에 대시가 온 다음 4개의 숫자로 구성되어야 합니다. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) 이전 예제와 같지만 하이픈 중 하나가 입력에서 제자리에 있지 않습니다. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) 8, 9 또는 10자의 문자 및 하나 이상의 숫자와 하나 이상의 영문자를 포함해야 하는 강력한 암호의 유효성을 검사합니다. 문자열은 특수 문자를 포함할 수 없습니다. false

Match 및 MatchAll 예시

수식 설명 결과
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" 연락처 정보의 이메일 부분만 추출합니다. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" 연락처 정보의 이메일 부분만 추출합니다. 유효한 주소를 찾을 수 없으므로(@ 기호 없음) 함수는 blank을 반환합니다. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Language 함수가 반환하는 언어, 스크립트 및 언어 태그의 지역 부분을 추출합니다. 이 결과는 미국을 반영하므로 더 많은 예제를 위해 Language 함수 설명서를 참조하십시오. (?: 연산자는 다른 하위 일치를 만들지 않고 문자를 그룹화합니다. {
language: "en",
script: 공백,
region: "US",
FullMatch: "en-US",
SubMatches: [ "en", "", "US" ],
StartMatch: 1
}
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) ISO 8601 기간 값에서 시간, 분, 초를 추출합니다. 추출된 숫자는 여전히 텍스트 문자열에 있습니다. Value 함수를 사용해 연산이 수행되기 전 숫자로 바꿉니다. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

마지막 예를 살펴 보겠습니다. Time 함수를 사용해 이 문자열을 날짜/시간 값으로 변환하려면 명명된 하위 일치에 개별적으로 전달해야 합니다. 이렇게 하려면 Match가 반환하는 레코드에서 수행되는 With 함수를 사용하면 됩니다.

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

이 예에서는 Button 컨트롤을 추가하고 OnSelect 속성을 이 수식으로 바꾸고 단추를 선택합니다.

Set( pangram, "The quick brown fox jumps over the lazy dog." )
수식 설명 결과
Match( pangram, "THE", IgnoreCase ) 텍스트 문자열에서 pangram 변수가 포함하는 "THE"와 일치하는 모든 항목을 찾습니다. 문자열에는 두 개의 일치 항목이 포함되어 있지만 MatchAll이 아닌 Match를 사용 중이므로 첫 번째 항목만 반환됩니다. 하위 일치가 정의되지 않았으므로 SubMatches 열이 비어 있습니다. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) 텍스트 문자열에서 pangram 변수가 포함하는 "the"와 일치하는 모든 항목을 찾습니다. 테스트는 대소문자를 구분하므로 "the"의 두 번째 인스턴스만 발견됩니다. 하위 일치가 정의되지 않았으므로 SubMatches 열이 비어 있습니다. pangram의 MatchAll.
MatchAll( pangram, "the", IgnoreCase ) 텍스트 문자열에서 pangram 변수가 포함하는 "the"와 일치하는 모든 항목을 찾습니다. 이 경우 테스트는 대소문자를 구분하지 않으므로 단어의 두 인스턴스가 모두 발견됩니다. 하위 일치가 정의되지 않았으므로 SubMatches 열이 비어 있습니다. IgnoreCase가 포함된 MatchAll.
MatchAll( pangram, "\b\wo\w\b" ) 중간에 "o"가 있는 3 글자 단어를 모두 찾습니다. "brown"은 3 글자 단어가 아니므로 "\b"(단어 경계)와 일치하지 않아 제외됩니다. B, wo, w 및 b가 포함된 pangram의 MatchAll.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) "fox"와 "dog" 사이의 모든 문자를 일치시킵니다. {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

갤러리에서 MatchAll의 결과를 보려면:

  1. 빈 화면에서 빈 세로 Gallery 컨트롤을 삽입합니다.

  2. 갤러리의 Items 속성을 MatchAll( pangram, "\w+" ) 또는 MatchAll( pangram, MultipleLetters )로 설정합니다.

    항목 갤러리.

  3. 갤러리 컨트롤 중간의 "삽입 탭에서 항목 추가"를 선택하여 갤러리 템플릿을 선택합니다.

  4. 갤러리 템플릿에 Label 컨트롤을 추가합니다.

  5. 레이블의 Text 속성을 ThisItem.FullMatch로 설정합니다.

    갤러리는 예제 텍스트에서 각 단어로 채워져 있습니다. 한 화면에서 모든 단어를 보려면 갤러리의 템플릿과 레이블 컨트롤의 크기를 조정합니다.

    Text 속성.