Funkcje IsMatch, Match i MatchAll
Dotyczy: Aplikacje kanwy Aplikacje oparte na modelu Interfejs Power Pages Power Platform wiersza polecenia aplikacji opartych na modelu
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.
Match zwraca rekord informacji dla pierwszego znalezionego dopasowania, a MatchAll zwraca tabelę rekordów dla każdego znalezionego dopasowania. Rekord lub rekordy zawierają następujące dane:
Column | Type | opis |
---|---|---|
Nazwane poddopasowanie lub podmecze | 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. |
Pełny mecz | Tekst | Wszystkie dopasowane ciągi tekstowe. |
Mecz początkowy | Numer | Pozycja początkowa dopasowania w ciągu tekstowym wejściowym. 1 jest pierwszym zwracanym znakiem ciągu. |
Mecze podrzędne | 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 ciąg tekstowy (Complete MatchOption), podczas gdy Match i MatchAll wyszukują dopasowanie w dowolnym miejscu w ciągu tekstowym (zawiera 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, lub false , jeśli tak nie jest. Match zwraca wartość pustą , jeśli nie zostanie znalezione dopasowanie, które można przetestować za pomocą funkcji IsBlank . MatchAll zwraca pustą tabelę, jeśli nie zostanie znalezione dopasowanie, które można przetestować 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 |
---|---|---|
Jakikolwiek | Zastępuje dowolny znak. | . |
Przecinek | Zastępuje przecinek. | , |
Cyfra | Zastępuje jedną cyfrę z przedziału od „0” do „9”. | \d |
Zastępuje adres e-mail, który zawiera symbol „@” i nazwę domeny zwierającą znak kropki („.”) | .+\@.+\\.[^\\.]{2,} |
|
Łącznik | Zastępuje łącznik. | \- |
LeftParen | Zastępuje lewy nawias okrągły „(”. | \( |
Litera | Zastępuje literę. | \p{L} |
Wielocyfrowość | Zastępuje co najmniej jedną cyfrę. | \d+ |
Wiele liter | Zastępuje co najmniej jedną literę. | \p{L}+ |
MultipleNonSpaces (Wiele niedozwolonych spacji) | Zastępuje co najmniej jeden znak, który nie dodaje odstępu (nie spacja, nie znak tabulacji, ani nie nowy wiersz). | \S+ |
MultipleSpaces (Wiele przestrzeni) | Zastępuje co najmniej jeden znak, który dodaje odstęp (spacja, znak tabulacji lub nowy wiersz). | \s+ |
Niespacja | Zastępuje jeden znak, który nie dodaje odstępu. | \S |
Cyfry opcjonalne | Zastępuje zero lub dowolną liczbę cyfr. | \d* |
Opcjonalne litery | Zastępuje zero lub dowolną liczbę liter. | \p{L}* |
OpcjonalnePrzestrzenie niedozwolone | Zastępuje zero lub dowolną liczbę znaków, które nie dodają odstępów. | \S* |
Przestrzenie opcjonalne | Zastępuje zero lub dowolną liczbę znaków, które dodają odstępy. | \s* |
Okres | Zastępuje znak kropki („.”). | \. |
RightParen | Zastępuje prawy nawias okrągły „)”. | \) |
Przestrzeń | Zastępuje znak, który dodaje odstęp. | \s |
Zakładka | 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.Kompletny | 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 – wymagane. Testowany ciąg tekstowy.
- Wzór – wymagane. 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ć stałą formułą bez żadnych zmiennych, źródeł danych ani innych odwołań dynamicznych, które zmieniają się wraz z działaniem aplikacji.
- Opcje – Opcjonalnie. 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 – wymagane. Dopasowany ciąg tekstowy.
- Wzór – wymagane. 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ć stałą formułą bez żadnych zmiennych, źródeł danych ani innych odwołań dynamicznych, które zmieniają się wraz z działaniem aplikacji.
- Opcje – Opcjonalnie. 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 – wymagane. Dopasowany ciąg tekstowy.
- Wzór – wymagane. 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ć stałą formułą bez żadnych zmiennych, źródeł danych ani innych odwołań dynamicznych, które zmieniają się wraz z działaniem aplikacji.
- Opcje – Opcjonalnie. 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”. | prawdziwy |
IsMatch( TextInput1.Text, "Good bye" ) |
Sprawdza, czy dane wejściowe podane przez użytkownika dokładnie odpowiadają ciągowi „Good bye”. | fałszywy |
IsMatch( TextInput1.Text, "hello", Contains ) |
Sprawdza, czy dane wejściowe podane przez użytkownika zawierają wyraz „hello” (wielkość liter jest rozróżniana). | fałszywy |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Sprawdza, czy dane wejściowe podane przez użytkownika zawierają wyraz „hello” (wielkość liter nie jest rozróżniana). | prawdziwy |
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 | prawdziwy |
IsMatch( "joan@contoso.com", Email ) |
Zastępuje adres e-mail | prawdziwy |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Zastępuje sekwencję cyfr, kropkę oraz zero lub dowolną liczbę cyfr. | prawdziwy |
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. | fałszywy |
Wyrażenia regularne
Wzór | Opis | Wynik |
---|---|---|
IsMatch( "986", "\d+" ) |
Zastępuje liczbę całkowitą większą od zera. | prawdziwy |
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. | prawdziwy |
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. | prawdziwy |
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. | prawdziwy |
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. | fałszywy |
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. | fałszywy |
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. | pusty |
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( 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( 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). | |
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:
W pustym ekranie wstaw pusty kontrolkę pionowej Gallery.
Ustaw właściwość Items na MatchAll( pangram, "\w+" ) lub MatchAll( pangram, MultipleLetters ).
Wybierz "Dodaj element z karty Wstaw" w środku kontrolki galerii, aby wybrać formularz galerii.
Dodaj kontrolkę Label do szablonu galerii.
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.