IsMatch, Match és MatchAll függvény

A következőkre vonatkozik: Vászonalapú alkalmazások Modellvezérelt alkalmazások Power Platform CLI

Szöveges karkaterláncban keres egyezést vagy pontosan egyező részeket adott minta alapján.

Ismertetés

Az IsMatch függvény ellenőrzi, hogy egy szöveges sztring megfelel-e egy olyan mintának, mely normál karaktereket, előre meghatározott mintákat vagy egy reguláris kifejezést tartalmazhat. A Match és a MatchAll függvény az egyező elemeket adja vissza, beleértve az alegyezéseket is.

Az IsMatch függvénnyel ellenőrizheti, hogy a felhasználó mit adott meg egy Szövegbevitel vezérlőelemben. Ellenőrizheti például az eredmény az adatforrásba való mentése előtt, hogy a felhasználó érvényes e-mail-címet adott-e meg. Ha a bejegyzés nem felel meg a feltételeknek, hozzáadhat további vezérlőelemeket, melyek a bejegyzés javítására kérik a felhasználót.

A Match használatával kinyerheti az első szöveges karakterláncot, amely megfelel egy mintázatnak és a MatchAll függvénnyel az összes egyező szöveges karakterlánc nyerheti ki. Az összetett karakterláncok értelmezéséhez az alegyezéseket is kinyerheti.

A Match az első találathoz tartozó információrekordot adja vissza, a MatchAll pedig a talált összes találathoz tartozó táblát adja vissza. A rekord vagy rekordok a következőket tartalmazzák:

Column Type Description
megnevezett alegyezés vagy alegyezések Szöveges Minden egyes megnevezett alegyezésnek saját oszlopa lesz. Hozzon létre egy névvel ellátott alegyezést a (?<name>) elemmel a reguláris kifejezésben. Ha egy névvel ellátott alegyezésnek ugyanaz a neve, mint az egyik előre definiált oszlopok egyikének (lent), az alegyeztetés elsőbbséget élvez, és egy figyelmeztetés jön létre. A figyelmeztetés elkerüléséhez nevezze át az alegyeztetést.
FullMatch Szöveg Az összes egyező szöveges karakterlánc.
StartMatch Szám Az egyezőség kezdő pozíciója a bevitt szöveges karakterláncon belül. A sztring első karaktere 1-et ad vissza.
SubMatches Egyoszlopos táblázatos szöveg (oszlop Érték) A nevezett és nem elnevezett alegyezések táblázata a reguláris kifejezésben megjelenő sorrendjüknek megfelelő sorrendben. Általánosságban elmondható, hogy a névvel rendelkező alegyezések egyszerűbben használhatók, és ezek használatát javasoljuk. Használja a ForAll függvényt vagy a Last( FirstN( ) ) függvényt különálló alegyezésekkel történő munkára. Ha a reguláris kifejezésben nem határoztak meg alegyezéseket, akkor ez a tábla megjelenik, de üresen.

Ezek a függvények támogatják a MatchOptions elemet. Alapértelmezésben:

  • Ezek a függvények kis-és nagybetűket megkülönböztető egyeztetéseket hajtanak végre. A MatchOptions.IgnoreCase használatával kis- és nagybetűket nem megkülönböztető mérkőzéseket hajthat végre.
  • Az IsMatch a teljes szöveges karakterlánccal keres egyezést (Teljes MatchOption), míg a Match és a MatchAll a szöveges karakterláncban bárhol megkeresi az egyezést (Tartalmazza MatchOption). Az esetnek megfelelően használja a CompleteContains, BeginsWith vagy EndsWith elemeket.

Az IsMatch függvény igaz értéket ad vissza, ha a szöveges sztring megfelel a mintának, és hamis értéket, ha nem. Ha nem talál egyezést a Matchüres értéket ad vissza, ez az IsBlank függvénnyel megvizsgálható. Ha nem talál egyezést a MatchAll üres táblát ad vissza, ez az IsEmpty függvénnyel megvizsgálható.

Ha a MatchAll segítségével oszt fel egy szöveges karakterláncot, érdemes megfontolni a Split függvény használatát, amely egyszerűbben használható és gyorsabb is.

Minták

A függvények használatához a legfontosabb az egyeztetni kívánt minta megadása. A mintát egy szöveges sztringben adhatja meg a következők kombinációjaként:

  • Normál karakterek, mint például az "abc" vagy az "123".
  • Előre meghatározott minták, mint például a Betű, MultipleDigits vagy E-mail. (Ezek a minták a Match enumerálásban vannak meghatározva.)
  • Reguláris kifejezés kódjai, mint például a "\d+\s+\d+" vagy az "[a – z] +".

Kombinálja ezeket az elemeket a karakterlánc-összefűző operátorral . Például az "abc" & Digit & "\s+"egy érvényes minta, amely megfelel az "a", "b" és "c" karaktereknek, amelyeket egy 0 és 9 közötti számjegy követ, amelyet legalább egy szóköz karakter követ.

Normál karakterek

A legegyszerűbb minta normál karakterek egy sorozata, mellyel pontos egyezést kell keresni.

Ha például a IsMatch függvényt használja, a „Hello” karakterlánc pontosan egyezik a „Hello” mintával. Annál nem több, és nem is kevesebb. A „hello!” sztring nem felel meg a mintának, mert a végén felkiáltójel szerepel, illetve mert nem nagy „h” szerepel benne. (A működés módosításával kapcsolatban lásd az MatchOptions című szakaszt.)

A mintanyelvben bizonyos karakterek speciális célokra vannak fenntartva. Ezen karakterek használatához lássa el az adott karaktert \ (fordított perjel) előtaggal annak jelölésére, hogy a következő karaktert szó szerint kell értelmezni, vagy használja a témakörben később ismertetett előre meghatározott minták egyikét. A speciális karakterek a következő táblázatban vannak felsorolva:

Speciális karakter Description
. pont
? kérdőjel
* csillag
+ plusz
( ) kerek zárójelek
[ ] szögletes zárójelek
{ } kapcsos zárójelek
^ caret
$ dollárjel
| függőleges vonal
\ fordított perjel

A "Hello\?" minta segítségével például megfeleltetheti a „Hello?” szöveget, egy fordított perjellel a kérdőjel előtt.

Előre meghatározott minták

Az előre meghatározott mintákkal egyszerűen egyeztethető egy karakterkészlet vagy több karakter sorozata. Használja a karakterlánc-összefűző operátort &a saját szöveges karakterláncok kombinálásához a Match felsorolás tagjaival :

Match enumerálás Ismertetés Reguláris kifejezés
Any Tetszőleges karakterre illeszkedik. .
Comma Egy vesszőre illeszkedik. ,
Digit Egyetlen („0” és „9” közötti) számjegyre illeszkedik. \d
Email Egy olyan e-mail-címre illeszkedik, amely tartalmaz egy kukacjelet („@”), illetve egy pontot („.”) tartalmazó tartománynevet. .+\@.+\\.[^\\.]{2,}
Hyphen Egy kötőjelre illeszkedik. \-
LeftParen Egy nyitó zárójelre „(” illeszkedik. \(
Letter Egy betűre illeszkedik. \p{L}
MultipleDigits Egy vagy több számjegyre illeszkedik. \d+
MultipleLetters Egy vagy több betűre illeszkedik. \p{L}+
MultipleNonSpaces Egy vagy több olyan karakterre illeszkedik, amely nem szúr be térközt (nem szóköz, tabulátor, nem soremelés). \S+
MultipleSpaces Egy vagy több olyan karakterre illeszkedik, amely térközt szúr be (szóköz, tabulátor vagy sortörés). \s+
NonSpace Egyetlen olyan karakterre illeszkedik, amely nem szúr be térközt. \S
OptionalDigits Nulla, egy vagy több számjegyre illeszkedik. \d*
OptionalLetters Nulla, egy vagy több betűre illeszkedik. \p{L}*
OptionalNonSpaces Nulla, egy vagy több olyan karakterre illeszkedik, amely nem szúr be térközt. \S*
OptionalSpaces Nulla, egy vagy több olyan karakterre illeszkedik, amely térközt szúr be. \s*
Period Egy pontra („.”) illeszkedik. \.
RightParen Egy záró zárójelre „(” illeszkedik. \)
Space Egy olyan karakterre illeszkedik, amely térközt szúr be. \s
Lapfül Tetszőleges tabulátor karakternek felel meg. \t

Például az "A" & MultipleDigits minta megegyezik az "A" betűvel, amelyet egy vagy több számjegy követ.

Reguláris kifejezések

Ezek által függvények által használt minta egy reguláris kifejezés. A témakör korábbi részében leírt normál karakterekből és előre meghatározott mintákból reguláris kifejezések hozhatók létre.

A reguláris kifejezések nagyon hatékonyak, számos programozási nyelvben elérhetők, és számos különböző célra használhatók. Gyakran az írásjelek véletlenszerű sorozatát is tűnnek. Ebben a cikkben nincs lehetőség minden szempontból leírni a reguláris kifejezéseket, de az interneten bőségesen érhetők el információk és oktatóanyagok, melyek a segítségére lehetnek.

A reguláris kifejezéseknek különböző dialektusai vannak, és a Power Apps a JavaScript-dialektus változatát használja. Lásd a reguláris kifejezés szintaxisát című részt a szintaxis bemutatáshoz. A nevezett alegyezések (más néven elnevezett belefoglalási csoportok) támogatottak:

  • Nevezett alegyezések: (?<név> ...)
  • Nevezett visszahivatkozások: \k<név>

A témakör korábbi Match táblázatában minden enumeráció ugyanabban a sorban jelenik meg, mint a megfelelő reguláris kifejezés.

Egyeztetési beállítások

Ezeknek a függvényeknek a viselkedését egy vagy több beállítás megadásával módosíthatja, amelyeket a karakterlánc-összefűző operátorral (&) kombinálhat.

MatchOptions enumeráció Description Reguláris kifejezésre gyakorolt hatás
MatchOptions.BeginsWith A mintának a szöveg elejétől kezdve kell illeszkednie. Egy ^ jelet szúr be a reguláris kifejezés elejére.
MatchOptions.Complete Alapértelmezés az IsMatch függvényhez. A mintának a teljes szöveges sztringgel meg kell egyeznie, elejétől a végéig. A reguláris kifejezés elejére egy ^, a végére pedig egy $ jelet szúr be.
MatchOptions.Tartalmazza Alapértelmezett a Match és a MatchAll függvényekhez. A mintának valahol meg kell jelennie a szövegben, de nem szükséges azzal kezdődnie vagy végződnie. Nem módosítja a reguláris kifejezést.
MatchOptions.EndsWith A mintának a szöveges sztring végéig kell illeszkednie. Egy $ jelet szúr be a reguláris kifejezés végére.
MatchOptions.IgnoreCase A kis-és nagybetűket azonosként kezeli. Az egyeztetés alapértelmezés szerint megkülönbözteti a kis- és nagybetűket. Nem módosítja a reguláris kifejezést. Ez a beállítás megegyezik a reguláris kifejezésekhez használt szabványos „i” módosítóval.
MatchOptions.Többszörös vonal Több soron keresztül végez egyeztetést. Nem módosítja a reguláris kifejezést. Ez a beállítás megegyezik a reguláris kifejezésekhez használt szabványos „m” módosítóval.

A MatchAll használata egyenértékű a szokásos „g” módosító használatával a reguláris kifejezésekhez.

Szintaxis

IsMatch( Szöveg, Minta [, Beállítások ] )

  • Szöveg – Kötelező. A vizsgálni kívánt szöveges sztring.
  • Minta – Kötelező. A vizsgálni kívánt minta, szöveges sztring formájában. Összefűzhet a Match enumerációban definiált előre meghatározott mintákat, vagy megadhat egy reguláris kifejezést. A Mintának állandó képletnek kell lennie változók, adatforrások vagy az alkalmazás futása során módosuló egyéb dinamikus hivatkozások nélkül.
  • Beállítások – Nem kötelező. A MatchOptions enumeráció értékeinek szöveges sztringben megadott kombinációja. A rendszer alapértelmezés szerint a MatchOptions.Complete beállítást használja.

Match( Szöveg, Minta [, Beállítások ] )

  • Szöveg – Kötelező. Az egyeztetni kívánt szöveges sztring.
  • Minta – Kötelező. Az egyeztetni kívánt minta, szöveges sztring formájában. Összefűzhet a Match enumerációban definiált előre meghatározott mintákat, vagy megadhat egy reguláris kifejezést. A Mintának állandó képletnek kell lennie változók, adatforrások vagy az alkalmazás futása során módosuló egyéb dinamikus hivatkozások nélkül.
  • Beállítások – Nem kötelező. A MatchOptions enumeráció értékeinek szöveges sztringben megadott kombinációja. A rendszer alapértelmezés szerint a MatchOptions.Contains beállítást használja.

MatchAll( Szöveg, Minta [, Beállítások ] )

  • Szöveg – Kötelező. Az egyeztetni kívánt szöveges sztring.
  • Minta – Kötelező. Az egyeztetni kívánt minta, szöveges sztring formájában. Összefűzhet a Match enumerációban definiált előre meghatározott mintákat, vagy megadhat egy reguláris kifejezést. A Mintának állandó képletnek kell lennie változók, adatforrások vagy az alkalmazás futása során módosuló egyéb dinamikus hivatkozások nélkül.
  • Beállítások – Nem kötelező. A MatchOptions enumeráció értékeinek szöveges sztringben megadott kombinációja. A rendszer alapértelmezés szerint a MatchOptions.Contains beállítást használja.

IsMatch példák

Normál karakterek

Tegyük fel, hogy az alkalmazásban található egy TextInput1 nevű Szövegbevitel vezérlőelem. A felhasználó értékeket adhat meg ebben a vezérlőelemben egy adatbázisban való tárolás céljából.

A felhasználó beírja a TextInput1 vezérlőelembe, hogy Helló, világ.

Képlet Ismertetés Eredmény
IsMatch( TextInput1.Text, "Hello world" ) Azt ellenőrzi, hogy a felhasználói bevitel megegyezik-e a „Helló, világ” sztringgel true
IsMatch( TextInput1.Text, "Good bye" ) Azt ellenőrzi, hogy a felhasználói bevitel megegyezik-e a „Viszlát” sztringgel. false
IsMatch( TextInput1.Text, "hello", Contains ) Azt ellenőrzi, hogy a felhasználói bevitel tartalmazza-e a "helló" szót (a kis- és nagybetűk megkülönböztetésével). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Azt ellenőrzi, hogy a felhasználói bevitel tartalmazza-e a "helló" szót (a kis- és nagybetűk megkülönböztetése nélkül). true

Előre meghatározott minták

Képlet Ismertetés Eredmény
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Egyesült államokbeli társadalombiztosítási számokra illeszkedik true
IsMatch( "joan@contoso.com", Email ) E-mail-címekre illeszkedik true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Számjegyek olyan sorozataira illeszkedik, melyet egy pont, majd nulla vagy több számjegy követ. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Számjegyek olyan sorozataira illeszkedik, melyet egy pont, majd nulla vagy több számjegy követ. A szövegben nem szerepel egyeztetendő szöveg, így ez a minta nem egyezik. false

Reguláris kifejezések

Képlet Ismertetés Eredmény
IsMatch( "986", "\d+" ) Nullánál nagyobb egész számokra illeszkedik. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Pozitív pénznemösszegekre illeszkedik. Ha a bemenetben szerepel tizedespont, akkor a tizedespont után legalább két számjegyet is tartalmaznia kell. A 3.00 például érvényes, a 3.1 viszont nem. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Pozitív vagy negatív pénznemösszegekre illeszkedik. Ha a bemenetben szerepel tizedespont, akkor a tizedespont után legalább két számjegyet is tartalmaznia kell. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Egyesült államokbeli társadalombiztosítási számokra illeszkedik. Ellenőrzi a megadott beviteli mező formátumát, típusát és hosszát. Az egyeztetni kívánt sztringnek három számjegyből, egy ezeket követő kötőjelből, majd kettő számjegyből és egy ezeket követő kötőjelből, majd négy számjegyből kell állnia. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Megegyezik az előző példával azt leszámítva, hogy az egyik kötőjel elhelyezkedése nem megfelelő a bemenetben. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Érvényesít egy erős jelszót, melynek nyolc, kilenc vagy 10 karakterből kell állnia, valamint legalább egy számot és egy betűt kell tartalmaznia. A sztring nem tartalmazhat különleges karaktereket. false

Match és MatchAll példák

Képlet Ismertetés Eredmény
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Csak a kapcsolattartói adatok e-mail részét nyeri ki. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Csak a kapcsolattartói adatok e-mail részét nyeri ki. A rendszer nem találja a vállalati címet (nincs @ jel), így a függvény blank értéket ad vissza. üres
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Kinyeri s szöveg, szkript és régió részeket a nyelvi címkéből, amit a Language függvény visszaküld. Ezek az eredmények az Egyesült Államokat tükrözik; További példák a Language függvény dokumentációjában találhatók. A (?: karaktereket csoportosít anélkül, hogy alegyezést hoznak létre. {
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)?" ) Egy ISO 8601 időtartamértékből kinyeri az órát, a percet és a másodpercet. A kinyert számok továbbra is szöveges karakterláncban vannak; az Value függvénnyel átalakíthatja számmá, mielőtt matematikai műveleteket hajt végre rajta. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Nézzünk bele az utolsó példába. Ha a karakterláncot dátum-/időértékre szeretné átalakítani az Time függvénnyel, akkor a névvel ellátott alegyezéseket egyesével kell átadnia. Ehhez használható a With függvény, ami azona rekordon végez műveletet, amit a Match visszaküld:

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

Ezeknél a példáknál adjon hozzá egy Gomb vezérlőt, állítsa be az OnSelect tulajdonságot ehhez a képlethez, majd jelölje ki a gombot:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Képlet Ismertetés Eredmény
Match( pangram, "THE", IgnoreCase ) A "THE" egyezés keresés olyan karakterláncokban, amelyeket a pangram változó tartalmaz. A karakterlánc két találatot tartalmaz, de csak az első jelenik meg, mert a Match és nem a MatchAll függvényt használja. Az SubMatches oszlop üres, mert nem definiáltak alegyezéseket. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) A "the" egyezés keresés olyan karakterláncokban, amelyeket a pangram változó tartalmaz. A teszt kis-és nagybetűérzékeny, így csak a "the" második példányát találja meg. Az SubMatches oszlop üres, mert nem definiáltak alegyezéseket. MatchAll a pangram esetében.
MatchAll( pangram, "the", IgnoreCase ) A "the" egyezés keresés olyan karakterláncokban, amelyeket a pangram változó tartalmaz. Ebben az esetben a teszt nem kis-és nagybetűérzékeny, így a szó mindkét példányát megtalálja. Az SubMatches oszlop üres, mert nem definiáltak alegyezéseket. MatchAll és IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Hárombetűs szavakat talál meg, amelyek középső betűje „o”. Figyelje meg, hogy a „brown” ki lett hagyva, mert nem egy hárombetűs szó, ezért nem felel meg a "\b" (boundary) operátornak. MatchAll a pangram esetében b, wo, w és b értékekkel.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) A „fox” és a „dog” közötti összes karaktert egyezteti. {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

A Galéria MatchAll eredményeinek megtekintése:

  1. Szúrjon be egy üres, függőleges Katalógus vezérlőt egy üres képernyőre.

  2. Állítsa be a Katalógus Elemek tulajdonságát MatchAll( pangram, "\w+" ) vagy MatchAll( pangram, MultipleLetters ) értékre.

    Elemek gyűjteménye.

  3. A Katalógus sablonjának kiválasztásához válassza az „Elem hozzáadása a Beszúrás lapról” elemet a Katalógusvezérlő közepén.

  4. Adjon hozzá egy Címke vezérlőelemet a katalógussablonhoz.

  5. Állítsa a címke Szöveg tulajdonságát a következő kifejezésre: ThisItem.FullMatch.

    A Katalógus a példában szereplő szöveg minden szavával ki van töltve. Hogy az összes szót láthassa a képernyőn méretezze át a katalógus sablonját és a címkevezérlőt.

    Szöveg tulajdonság.