Funkcje IsMatch, Match i MatchAll

Dotyczy: Aplikacje kanwy Aplikacje oparte na modelu Power Platform CLI

Wyszukuje dopasowanie lub wyodrębnianie fragmentów ciągu tekstowego opartego na wzorcu.

Opis

Funkcja IsMatch sprawdza, czy ciąg tekstowy jest zgodny ze wzorcem, który może zawierać znaki zwykłe, wstępnie zdefiniowane wzorce lub wyrażenie regularne. Funkcje Match oraz MatchAll zwracają dopasowania, takie jak dopasowania podrzędne.

Dzięki funkcji IsMatch można sprawdzić tekst wpisany przez użytkownika w kontrolce Text input. Można na przykład potwierdzić, czy użytkownik wprowadził prawidłowy adres e-mail, zanim wynik zostanie zapisany w źródle danych. Jeśli wpis nie jest zgodny z kryteriami, należy dodać kolejne kontrolki, które wyświetlą monit o poprawienie wpisanego tekstu.

Użyj opcji Match w celu wyodrębnienia pierwszego ciągu tekstowego, który pasuje do wzorca i MatchAll, aby wyodrębnić wszystkie pasujące ciągi tekstowe. Można również wyodrębnić dopasowania podrzędne do analizy złożonych ciągów.

Funkcja Match zwraca rekord informacji dla pierwszego znalezionego dopasowania, a MatchAll zwraca tabelę rekordów odpowiadającą każdemu znalezionemu rekordowi dopasowania. Rekord lub rekordy zawierają następujące dane:

Column Type opis
named sub‑match or sub‑matches Tekst Każde nazwane dopasowanie podrzędne będzie mieć własną kolumnę. Tworzenie nazwanego dopasowania podrzędnego za pomocą funkcji (?<name>...) w wyrażeniu regularnym. Jeśli nazwane dopasowania podrzędne mają taką samą nazwę jak jedna ze zdefiniowanych wcześniej kolumn (niżej wymienionych), wartość atrybutu podrzędnego ma pierwszeństwo i zostanie wygenerowane ostrzeżenie. Aby uniknąć tego ostrzeżenia, zmień nazwę podrzędnego dopasowania.
FullMatch Tekst Wszystkie dopasowane ciągi tekstowe.
StartMatch Numer Pozycja początkowa dopasowania w ciągu tekstowym wejściowym. 1 jest pierwszym zwracanym znakiem ciągu.
SubMatches Jednokolumnowy tekst tabeli (kolumna Value) Tabela zawierająca nazwane i nienazwane dopasowania podrzędne w kolejności, w jakiej są wyświetlane w wyrażeniu regularnym. Generalnie nazwane dopasowania podrzędne są łatwiejsze w użyciu i zaleca się korzystanie z nich. Użyj funkcji ForAll lub Last ( FirstN( ... ) ), aby pracować z indywidualnym dopasowaniami podrzędnymi. Jeśli w wyrażeniu regularnym nie są zdefiniowane dopasowania podrzędne, tabela będzie dostępna, ale pusta.

Te funkcje obsługują MatchOptions. Domyślnie:

  • Te funkcje wykonują dopasowania z uwzględnieniem wielkości liter. Użyj funkcji MatchOptions.IgnoreCase, aby wykonać małe dopasowania bez uwzględniania spraw.
  • IsMatch dopasowuje cały łańcuch tekstowy (Complete MatchOption), natomiast w Match oraz MatchAll wyszukuje dopasowanie w dowolnym miejscu ciągu tekstowego (Contains MatchOption). Użyj funkcji Complete, Contains, BeginsWith lub EndsWith w zależności od potrzeb.

IsMatch zwraca wartość true, jeśli ciąg tekstowy jest zgodny ze wzorcem. W przeciwnym razie zwraca wartość false. Match zwraca wartość blank, jeśli nie znaleziono dopasowania, która może być testowana za pomocą funkcji IsBlank. MatchAll zwraca pustą tabelę, jeśli nie znaleziono dopasowania, która może być testowana za pomocą funkcji IsEmpty.

W przypadku korzystania MatchAll w celu podzielenia ciągu tekstowego warto rozważyć użycie funkcji Split, która jest prostsza i szybsza.

Wzorce

Aby móc prawidłowo korzystać z tych funkcji, należy przede wszystkim opisać wzorzec używany do dopasowywania. Opisanie wzorca w ciągu tekstowym wymaga kombinacji następujących elementów:

  • Znaków zwykłych, takich jak „abc” lub „123”.
  • Wstępnie zdefiniowanych wzorców, takich jak Letter, MultipleDigits lub Email. (Te wzorce są definiowane przez dopasowane elementy typu wyliczeniowego).
  • Kody wyrażeń regularnych, takie jak „\d+\s+\d+” lub „[a-z]+”.

Te elementy są łączone za pomocą operatora łączenia ciągów& . Prawidłowy jest na przykład wzorzec "abc" & Digit & "\s+", który ma następującą postać: znaki „a”, „b” i „c”, cyfry z przedziału od 0 do 9 i co najmniej jeden znak odstępu.

Znaki zwykłe

Najprostszy wzorzec składa się z sekwencji dokładnie dopasowanych znaków zwykłych.

Na przykład jeśli używana jest funkcja IsMatch, ciąg "Hello" jest dokładnie taki sam, jak wzorzec "Hello". Dopasowanie jest dokładne. Ciąg „hello!” nie jest dopasowany do wzorca ze względu na obecność wykrzyknika i nieprawidłową wielkość litery „h”. (Zobacz opcje dopasowania MatchOptions, które umożliwiają zmianę tego zachowania).

We wzorcach pewne znaki są zarezerwowane do określonych celów. Aby móc z nich korzystać, należy zaznaczyć użycie ich dosłownego znaczenia, poprzedzając je znakiem \ (ukośnik odwrotny), lub użyć jednego z wstępnie zdefiniowanych wzorców. Opisano to dalej w tym temacie. Poniższa tabela zawiera listę znaków specjalnych:

Znak specjalny Opis
. kropka lub przecinek
? znak zapytania
* gwiazdka
+ plus
( ) nawiasy
[ ] nawiasy kwadratowe
{ } nawiasy klamrowe
^ caret
$ znak dolara
| kreska pionowa
\ ukośnik odwrotny

Na przykład można dopasować do siebie „Witaj?”, używając wzorca „Witaj\?” i „backslash” przed znakiem zapytania.

Wstępnie zdefiniowane wzorce

Wstępnie zdefiniowane wzorce pozwalają w prosty sposób dopasować jeden znak z zestawu lub sekwencję wielu znaków. Użyj operatora łączenia ciągów , aby połączyć własne ciągi tekstowe z operatorem & z dopasowanymi elementami członkowskimi typu wyliczeniowego wymienionymi poniżej:

Dopasowane elementy typu wyliczeniowego Opis Wyrażenie regularne
Any Zastępuje dowolny znak. .
Comma Zastępuje przecinek. ,
Digit Zastępuje jedną cyfrę z przedziału od „0” do „9”. \d
Email Zastępuje adres e-mail, który zawiera symbol „@” i nazwę domeny zwierającą znak kropki („.”) .+\@.+\\.[^\\.]{2,}
Hyphen Zastępuje łącznik. \-
LeftParen Zastępuje lewy nawias okrągły „(”. \(
Letter Zastępuje literę. \p{L}
MultipleDigits Zastępuje co najmniej jedną cyfrę. \d+
MultipleLetters Zastępuje co najmniej jedną literę. \p{L}+
MultipleNonSpaces Zastępuje co najmniej jeden znak, który nie dodaje odstępu (nie spacja, nie znak tabulacji, ani nie nowy wiersz). \S+
MultipleSpaces Zastępuje co najmniej jeden znak, który dodaje odstęp (spacja, znak tabulacji lub nowy wiersz). \s+
NonSpace Zastępuje jeden znak, który nie dodaje odstępu. \S
OptionalDigits Zastępuje zero lub dowolną liczbę cyfr. \d*
OptionalLetters Zastępuje zero lub dowolną liczbę liter. \p{L}*
OptionalNonSpaces Zastępuje zero lub dowolną liczbę znaków, które nie dodają odstępów. \S*
OptionalSpaces Zastępuje zero lub dowolną liczbę znaków, które dodają odstępy. \s*
Period Zastępuje znak kropki („.”). \.
RightParen Zastępuje prawy nawias okrągły „)”. \)
Space Zastępuje znak, który dodaje odstęp. \s
Tab Zastępuje znak karty. \t

Na przykład wzorzec "A" & MultipleDigits zastępuje literę „A” i następującą po niej co najmniej jedną cyfrę.

Wyrażenia regularne

Wzorzec używany przez te funkcje jest wyrażeniem regularnym. Znaki zwykłe i wstępnie zdefiniowane wzorce opisane powyżej w temacie pozwalają utworzyć wyrażenia regularne.

Wyrażenia regularne dają ogromne możliwości, są dostępne w wielu językach programowania i mają różne zastosowania. Mogą one także wyglądać podobnie do losowych sekwencji znaków interpunkcyjnych. W tym artykule nie jesteśmy w stanie opisać wszystkich aspektów wyrażeń regularnych, ale wiele pomocnych informacji, narzędzi i samouczków zostało opublikowanych w Internecie.

Wyrażenia regularne występują w różnych dialektach, ale usługa Power Apps używa wariantu dialektu JavaScript. Aby zapoznać się z wprowadzeniem do składni, aby zapoznać się z opisową składnia wyrażeń regularnych. Obsługiwane są nazwane dopasowania podrzędne (zwane też również nazwanymi grupami przechwytywania):

  • Nazwane dopasowania podrzędne: (?<name> ...)
  • Nazwany odnośnik: \k<name>

W tabeli dopasowania Match opisanej wcześniej w tym temacie każde wyliczenie jest wyświetlane w tym samym wierszu, w którym znajduje się odpowiadające mu wyrażenie standardowe.

Opcje dopasowania

Zachowanie tych funkcji można zmodyfikować, określając jedną lub więcej opcji, które można połączyć za pomocą operatora łączenia ciągu (&).

Elementy typu wyliczeniowego dla opcji typu MatchOptions Podpis Wpływ na wyrażenie regularne
MatchOptions.BeginsWith Dopasowanie wzorca musi uwzględniać początek tekstu. Dodaje znak ^ na początku wyrażenia regularnego.
MatchOptions.Complete Wartość domyślna: IsMatch. Dopasowanie wzorca musi dotyczyć całej długości ciągu tekstu. Dodaje znak ^ na początku i znak $ na końcu wyrażenia regularnego.
MatchOptions.Contains Domyślne dla Match i MatchAll. Wzorzec musi być zawarty w tekście, ale nie musi rozpoczynać ani kończyć wyrażenia. Nie modyfikuje wyrażenia regularnego.
MatchOptions.EndsWith Dopasowanie wzorca musi uwzględniać początek ciągu tekstu. Dodaje znak $ na końcu wyrażenia regularnego.
MatchOptions.IgnoreCase Traktuje wielkie i małe litery jako identyczne. Domyślnie dopasowanie uwzględnia wielkość liter. Nie modyfikuje wyrażenia regularnego. Ta opcja jest odpowiednikiem standardowego modyfikatora "i" w wyrażeniach regularnych.
MatchOptions.Multiline Zastępuje wiele wierszy. Nie modyfikuje wyrażenia regularnego. Ta opcja jest odpowiednikiem standardowego modyfikatora "m" w wyrażeniach regularnych.

Użycie funkcji MatchAll jest równoznaczne z użyciem standardowego modyfikatora "g" w wyrażeniach regularnych.

Składnia

IsMatch( Tekst, Wzorzec [, Opcje ] )

  • Tekst - wymagany. Testowany ciąg tekstowy.
  • Wzorzec – element wymagany. Testowany wzorzec w postaci ciągu tekstowego. Wymaga połączenia wstępnie zdefiniowanych wzorców określonych przez elementy typu wyliczeniowego Match lub podania wyrażenia regularnego. Wzorzec musi być ciągłą formułą bez żadnych zmiennych, źródeł danych lub innych odwołań dynamicznych, które zmieniają się podczas uruchamiania aplikacji.
  • Opcje – element wymagany. Ciąg tekstowy w połączeniu z wartościami wyliczeniowymi wyrażenia MatchOptions. Domyślnie używane jest wyrażenie MatchOptions.Complete.

Match( Tekst, Wzorzec [, Opcje ] )

  • Tekst - wymagany. Dopasowany ciąg tekstowy.
  • Wzorzec – element wymagany. Dopasowany wzorzec w postaci ciągu tekstowego. Wymaga połączenia wstępnie zdefiniowanych wzorców określonych przez elementy typu wyliczeniowego Match lub podania wyrażenia regularnego. Wzorzec musi być ciągłą formułą bez żadnych zmiennych, źródeł danych lub innych odwołań dynamicznych, które zmieniają się podczas uruchamiania aplikacji.
  • Opcje – element wymagany. Ciąg tekstowy w połączeniu z wartościami wyliczeniowymi wyrażenia MatchOptions. Domyślnie używane jest wyrażenie MatchOptions.Contains.

MatchAll( Tekst, Wzorzec [, Opcje ] )

  • Tekst - wymagany. Dopasowany ciąg tekstowy.
  • Wzorzec – element wymagany. Dopasowany wzorzec w postaci ciągu tekstowego. Wymaga połączenia wstępnie zdefiniowanych wzorców określonych przez elementy typu wyliczeniowego Match lub podania wyrażenia regularnego. Wzorzec musi być ciągłą formułą bez żadnych zmiennych, źródeł danych lub innych odwołań dynamicznych, które zmieniają się podczas uruchamiania aplikacji.
  • Opcje – element wymagany. Ciąg tekstowy w połączeniu z wartościami wyliczeniowymi wyrażenia MatchOptions. Domyślnie używane jest wyrażenie MatchOptions.Contains.

Przykłady IsMatch

Znaki zwykłe

Załóżmy, że aplikacja zawiera kontrolkę Text input o nazwie TextInput1. Użytkownik wprowadza w tej kontrolce wartości, które mają być przechowywane w bazie danych.

Użytkownik wpisuje frazę Hello world do kontrolki TextInput1.

Wzór Opis Wynik
IsMatch( TextInput1.Text, "Hello world" ) Sprawdza, czy dane wejściowe podane przez użytkownika dokładnie odpowiadają ciągowi „Hello world”. true
IsMatch( TextInput1.Text, "Good bye" ) Sprawdza, czy dane wejściowe podane przez użytkownika dokładnie odpowiadają ciągowi „Good bye”. false
IsMatch( TextInput1.Text, "hello", Contains ) Sprawdza, czy dane wejściowe podane przez użytkownika zawierają wyraz „hello” (wielkość liter jest rozróżniana). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Sprawdza, czy dane wejściowe podane przez użytkownika zawierają wyraz „hello” (wielkość liter nie jest rozróżniana). true

Wstępnie zdefiniowane wzorce

Wzór Opis Wynik
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Zastępuje numer ubezpieczenia społecznego w Stanach Zjednoczonych true
IsMatch( "joan@contoso.com", Email ) Zastępuje adres e-mail true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Zastępuje sekwencję cyfr, kropkę oraz zero lub dowolną liczbę cyfr. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Zastępuje sekwencję cyfr, kropkę oraz zero lub dowolną liczbę cyfr. Kropka nie znajduje się w tekście do dopasowania, więc ten wzorzec nie jest dopasowany. false

Wyrażenia regularne

Wzór Opis Wynik
IsMatch( "986", "\d+" ) Zastępuje liczbę całkowitą większą od zera. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Zastępuje dodatnią kwotę w walucie. Jeśli dane wejściowe zawierają separator dziesiętny, muszą po nim wystąpić 2 znaki numeryczne. Na przykład 3,00 jest zapisem prawidłowym, ale 3,1 jest zapisem błędnym. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Zastępuje dodatnią lub ujemną kwotę w walucie. Jeśli dane wejściowe zawierają separator dziesiętny, muszą po nim wystąpić 2 znaki numeryczne. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Zastępuje numer ubezpieczenia społecznego w Stanach Zjednoczonych. Weryfikuje format, typ i długość podanego pola danych wejściowych. Ciąg do dopasowania musi wyglądać następująco: 3 znaki numeryczne, kreska, 2 znaki numeryczne, kreska i 4 znaki numeryczne. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Przykład analogiczny do poprzedniego, ale jeden z łączników w danych wejściowych znajduje się w złym miejscu. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Weryfikuje silne hasło, które oprócz przynajmniej jednej cyfry i jednej litery musi zawierać 8, 9 lub 10 znaków. Ciąg nie może zawierać znaków specjalnych. false

Przykłady użycia Match oraz MatchAll

Wzór Opis Wynik
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Rozpakowuje tylko część e-mail z informacjami kontaktowymi. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Rozpakowuje tylko część e-mail z informacjami kontaktowymi. Nie można znaleźć adresu prawnego (brak znaku @), więc funkcja zwraca wartość blank. puste
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Funkcja Language wyodrębnia części: język, skrypt i region dla tagu języka, który zwraca funkcja Language. Te wyniki są odzwierciedlane w Stanach Zjednoczonych; więcej przykładów można znaleźć w dokumentacji dotyczącej funkcji Language. Operator (?: grupuje znaki bez tworzenia innego podrzędnego dopasowania). {
language: "en",
script: blank,
region: "US",
FullMatch: "en-US",
SubMatches: [ "en", "", "US" ],
StartMatch: 1
}
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Wyodrębnia godziny, minuty i sekundy z wartości czasu trwania ISO 8601. Wyodrębnione numery nadal są w ciągu tekstowym użyj funkcji Value w celu przeprowadzenia operacji matematycznych w celu przekonwertowania jej na liczbę. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Zagłębmy się bardziej w ten ostatni temat. Aby przekonwertować ten ciąg na datę/godzinę za pomocą funkcji Time, należy przekazać nazwane dopasowania podrzędne z osobna. Aby to zrobić, można użyć funkcji With działającej w rekordzie zwróconym przez funkcję Match:

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

Aby zapoznać się z tymi przykładami, należy dodać kontrolkę Przycisk, ustawić jego właściwość OnSelect na tę formułę, a następnie wybrać przycisk:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Wzór Opis Wynik
Match( pangram, "THE", IgnoreCase ) Znajdź wszystkie dopasowania elementu "THE" w ciągu tekstowym, który zawiera zmienna pangram. Ciąg zawiera dwa dopasowania, ale tylko pierwsze jest zwracane, ponieważ jest używana funkcja Match, a nie MatchAll. Kolumna dopasowania podrzędnego jest pusta, ponieważ nie zdefiniowano pasujących do niej dostosowań. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Znajdź wszystkie dopasowania elementu "the" w ciągu tekstowym, który zawiera zmienna pangram. W teście jest rozróżniana wielkość liter, więc znalezione zostanie tylko drugie wystąpienie elementu "the". Kolumna dopasowania podrzędnego jest pusta, ponieważ nie zdefiniowano pasujących do niej dostosowań. MatchAll dla pangramów.
MatchAll( pangram, "the", IgnoreCase ) Znajdź wszystkie dopasowania elementu "the" w ciągu tekstowym, który zawiera zmienna pangram. W tym przypadku podczas testu nie jest rozróżniana wielkość liter, więc można znaleźć zarówno wystąpienia danego wyrazu. Kolumna dopasowania podrzędnego jest pusta, ponieważ nie zdefiniowano pasujących do niej dostosowań. MatchAll z IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Program znajduje wszystkie trzyliterowe wyrazy ze znakiem "o" w środku. Należy zwrócić uwagę, że "brown" jest wykluczone, ponieważ nie jest to trzyliterowy wyraz i dlatego nie może być zgodny z parametrem "\b" (granica wyrazu). MatchAll dla pangramów z b, wo, w i b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Odpowiada wszystkim znakom między "fox" i "dog". {
pomiędzy: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
Dopasowania podrzędne: ["jumps over the lazy"],
StartMatch: 17
}

Aby zobaczyć wyniki MatchAll w galerii:

  1. W pustym ekranie wstaw pusty kontrolkę pionowej Gallery.

  2. Ustaw właściwość Items na MatchAll( pangram, "\w+" ) lub MatchAll( pangram, MultipleLetters ).

    Galeria elementów.

  3. Wybierz "Dodaj element z karty Wstaw" w środku kontrolki galerii, aby wybrać formularz galerii.

  4. Dodaj kontrolkę Label do szablonu galerii.

  5. Ustaw właściwość Text kontrolki etykiety na ThisItem.FullMatch.

    W galerii jest wypełniany każdy wyraz w tekście przykładowym. Zmień rozmiar szablonu galerii i formantu etykiety tak, aby wszystkie wyrazy były wyświetlane na jednym ekranie.

    Właściwość Text.