Comparteix a través de


Funcions IsMatch, Match i MatchAll

S'aplica a: Aplicacions de llenç CLI d'aplicacions Power Pages Power Platform basades en models

Prova si hi ha una coincidència o extreu parts d'una cadena de text en funció d'un patró.

Descripció

La funció IsMatch prova si una cadena de text coincideix amb un patró que pot incloure caràcters ordinaris, patrons predefinits o una expressió regular. Les funcions Match i MatchAll tornen els valors que coincideixen, també les subcoincidències.

Utilitzeu IsMatch per validar què ha escrit en un control Entrada de text. Per exemple, podeu confirmar si l'usuari ha introduït una adreça electrònica vàlida abans que el resultat es desi a la vostra font de dades. Si l'entrada no coincideix amb el vostre criteri, afegiu altres controls que demanin a l'usuari que corregeixi l'entrada.

Utilitzeu Match per extreure la primera cadena de text que coincideixi amb un patró i MatchAll per extreure totes les cadenes de text que coincideixin. També podeu extreure subcoincidències per analitzar cadenes complexes.

Match retorna un registre d'informació per a la primera coincidència trobada i MatchAll retorna una taula de registres per a cada coincidència trobada. El registre o registres contenen:

Column Type Descripció
subcoincidència o subcoincidències amb nom SMS Cada subcoincidència amb nom tindrà la seva pròpia columna. Creeu una subcoincidència amb nom mitjançant (?<nom>...) a l'expressió regular. Si una subcoincidència amb nom té el mateix nom que una de les columnes predefinides (a continuació), la subcoincidència té prioritat i es genera un advertiment. Per evitar aquest advertiment, canvieu el nom de la subcoincidència.
Partit complet Text Tota la cadena de text que ha coincidit.
IniciPartit Número Posició inicial de la coincidència dins de la cadena de text d'entrada. El primer caràcter de la cadena torna 1.
Coincidències secundàries Taula d'una sola columna de Text (columna Valor) Taula de subcoincidències amb nom i sense nom en l'ordre en què apareixen a l'expressió regular. En general, és més fàcil treballar amb les subcoincidències amb nom i es recomanen. Utilitzeu la funció ForAll o les funcions Last(FirstN(...)) per treballar amb una subcoincidència individual. Si no s'ha definit cap subcoincidència a l'expressió regular, aquesta taula apareixerà, però estarà buida.

Aquestes funcions admeten MatchOptions. Per defecte:

  • Aquestes funcions realitzen una coincidència que diferencia entre majúscules i minúscules. Utilitzeu MatchOptions.IgnoreCase per fer coincidències que no distingeixen entre majúscules i minúscules.
  • IsMatch coincideix amb tota la cadena de text (Complete MatchOption), mentre que Match i MatchAll cerquen una coincidència a qualsevol lloc de la cadena de text (Contains MatchOption). Utilitzeu Completa, Conté, BeginsWith o EndsWith segons calgui per a l'escenari.

IsMatch retorna true si la cadena de text coincideix amb el patró o false si no ho fa. La coincidència retorna en blanc si no es troba cap coincidència que es pugui provar amb la funció IsBlank . MatchAll retorna una taula buida si no es troba cap coincidència que es pugui provar amb la funció IsEmpty .

Si utilitzeu MatchAll per dividir una cadena de text, considereu la possibilitat d'utilitzar la funció Split, que és més senzilla d'utilitzar i més ràpida.

Patrons

La clau per utilitzar aquestes funcions és la descripció del patró que ha de coincidir. Descriviu el patró en una cadena de text com una combinació de:

  • Caràcters ordinaris, com ara "abc" o "123".
  • Patrons predefinits, com ara Lletra, MultipleDigits o Correu. (Match enum defineix aquests patrons).
  • Codis d'expressions regulars, com ara "\d+\s+\d+" o "[a-z]+".

Combina aquests elements utilitzant l'operador de concatenació de cadenes&. Per exemple, "abc" & Dígit & "\s+" és un patró vàlid que coincideix amb els caràcters "a", "b" i "c", seguits d'un dígit de 0 a 9, seguit d'almenys un caràcter d'espai en blanc.

Caràcters ordinaris

El patró més senzill és una seqüència de caràcters ordinaris que ha de coincidir exactament.

Per exemple, quan s'utilitza amb la funció IsMatch, la cadena "Hola" coincideix amb el patró "Hola" de manera exacte. Ni més ni menys. La cadena "hola!" no coincideix amb el patró a causa del signe d'exclamació del final i pel fet que la majúscula no es correspon al de la lletra "h". (Vegeu MatchOptions per obtenir les maneres de modificar aquest comportament).

En el llenguatge de patrons, alguns caràcters es reserven per a propòsits especials. Per utilitzar aquests caràcters, afegiu un prefix al caràcter amb \ (barra inversa) per indicar que el caràcter s'ha de prendre literalment; o bé, utilitzeu un dels patrons predefinits que es descriuen més endavant en aquest tema. En aquesta taula s'enumeren els caràcters especials:

Caràcter especial Descripció
. punt
? interrogant
* asterisc
+ suma
( ) parèntesis
[ ] claudàtors
{ } claus
^ signe d'intercalació
$ signe del dòlar
| barra vertical
\ barra inclinada inversa

Per exemple, podeu fer coincidir amb "Hola?" utilitzant el patró "Hola\?" amb una barra inversa abans que l'interrogant.

Patrons predefinits

Els patrons predefinits proporcionen una manera senzilla de fer coincidir un conjunt de caràcters o una seqüència de diversos caràcters. Utilitzeu l'operador de concatenació de cadenes& per combinar les vostres pròpies cadenes de text amb els membres de l'enumeració Match :

Match enum Descripció Expressió regular
Qualsevol Coincideix amb qualsevol caràcter. .
Coma Coincideix amb una coma. ,
Dígit Coincideix amb un sol dígit (del "0" al "9"). \d
Correu electrònic Coincideix amb una adreça electrònica que conté un símbol "arrova" ("@") i un nom de domini que conté un punt (".") .+\@.+\\.[^\\.]{2,}
Guionet Coincideix amb un guió. \-
Paren esquerre Coincideix amb un parèntesi esquerre "(". \(
Lletra Coincideix amb una lletra. \p{L}
Dígits múltiples Coincideix amb un o més dígits. \d+
Lletres múltiples Coincideix amb una o més lletres. \p{L}+
MultipleNonSpaces Coincideix amb un o més caràcters que no afegeixen un espai en blanc (que no siguin espai, tabulador ni salt de línia). \S+
Espais múltiples Coincideix amb un o més caràcters que afegeixen un espai en blanc (espai, tabulador o salt de línia). \s+
No Espai Coincideix amb un únic caràcter que no afegeix un espai en blanc. \S
Dígits opcionals Coincideix amb cap, un o més dígits. \d*
Cartes opcionals Coincideix amb cap, una o més lletres. \p{L}*
OpcionalNonSpaces Coincideix amb cap, un o més caràcters que no afegeixen un espai en blanc. \S*
Espais opcionals Coincideix amb cap, un o més caràcters que afegeixen un espai en blanc. \s*
Període Coincideix amb un punt ("."). \.
Dreta Coincideix amb un parèntesi dret ")". \)
Espai Coincideix amb un caràcter que afegeix un espai en blanc. \s
Pestanya Coincideix amb un caràcter de tabulació. \t

Per exemple, el patró "A" i MultipleDigits coincidiran amb la lletra "A" seguida d'un o més dígits.

Expressions regulars

El patró que utilitzen aquestes funcions és una expressió regular. Els caràcters ordinaris i els patrons predefinits que s'han descrit anteriorment en aquest tema ajuden a crear expressions regulars.

Les expressions regulars són molt potents, estan disponibles en molts llenguatges de programació i s'utilitzen per a una gran varietat de propòsits. Sovint poden semblar també una seqüència aleatòria de signes de puntuació. En aquest article no es descriuen tots els aspectes de les expressions regulars, però hi ha una gran quantitat d'informació, tutorials i eines disponibles a Internet.

Les expressions regulars venen en diferents dialectes i el Power Apps utilitza una variant del dialecte del JavaScript. Vegeu Sintaxi d'expressions regulars per obtenir una introducció a la sintaxi. S'admeten les subcoincidències amb nom (de vegades s'anomenen grups de captura amb nom):

  • Subcoincidències amb nom: (?<nom> ...)
  • Referències inverses amb nom: \k<nom>

A la taula Match enum anterior d'aquest tema, cada enum apareix a la mateixa fila que l'expressió regular corresponent.

Opcions de coincidència

Podeu modificar el comportament d'aquestes funcions especificant una o més opcions, que podeu combinar mitjançant l'operador de concatenació de cadena (&).

MatchOptions enum Descripció Impacte en una expressió regular
MatchOptions.BeginsWith El patró ha de coincidir des de l'inici del text. Afegeix un ^ a l'inici de l'expressió regular.
MatchOptions.Complete Valor per defecte d'IsMatch. El patró ha de coincidir amb tota la cadena de text, des de l'inici fins al final. Afegeix un ^ a l'inici i un $ al final de l'expressió regular.
MatchOptions.Contains Per defecte per a Match i MatchAll. El patró ha d'aparèixer en algun lloc del text, però no ha de ser a l'inici ni al final. No modifica l'expressió regular.
MatchOptions.EndsWith El patró ha de coincidir amb el final de la cadena de text. Afegeix un $ al final de l'expressió regular.
MatchOptions.IgnoreCase Tracta les lletres majúscules i minúscules com a idèntiques. Per defecte, la coincidència distingeix entre majúscules i minúscules. No modifica l'expressió regular. Aquesta opció és l'equivalent del modificador estàndard "i" per a les expressions regulars.
MatchOptions.Multiline Coincideix amb diverses línies. No modifica l'expressió regular. Aquesta opció és l'equivalent del modificador estàndard "m" per a les expressions regulars.

L'ús de MatchAll és l'equivalent de l'ús del modificador estàndard "g" per a les expressions regulars.

Sintaxi

IsMatch(Text,Pattern [, Opcions ] )

  • Text : obligatori. La cadena de text que es provarà.
  • Patró : obligatori. El patró que voleu provar com a cadena de text. Concateneu patrons predefinits que defineixi Match enum o proporcioneu una expressió regular. El patró ha de ser una fórmula constant sense variables, fonts de dades o altres referències dinàmiques que canviïn a mesura que s'executa l'aplicació.
  • Opcions : opcional. Una combinació de cadena de text de valors MatchOptions enum. Per defecte, s'utilitza MatchOptions.Completa.

Coincidència( Text,Patró [, Opcions ] )

  • Text : obligatori. La cadena de text que es farà coincidir.
  • Patró : obligatori. El patró que voleu fer coincidir com a cadena de text. Concateneu patrons predefinits que defineixi Match enum o proporcioneu una expressió regular. El patró ha de ser una fórmula constant sense variables, fonts de dades o altres referències dinàmiques que canviïn a mesura que s'executa l'aplicació.
  • Opcions : opcional. Una combinació de cadena de text de valors MatchOptions enum. Per defecte, s'utilitza MatchOptions.Conté.

MatchAll( Text,Patró [, Opcions ] )

  • Text : obligatori. La cadena de text que es farà coincidir.
  • Patró : obligatori. El patró que voleu fer coincidir com a cadena de text. Concateneu patrons predefinits que defineixi Match enum o proporcioneu una expressió regular. El patró ha de ser una fórmula constant sense variables, fonts de dades o altres referències dinàmiques que canviïn a mesura que s'executa l'aplicació.
  • Opcions : opcional. Una combinació de cadena de text de valors MatchOptions enum. Per defecte, s'utilitza MatchOptions.Conté.

Exemples IsMatch

Caràcters ordinaris

Imagineu que l'aplicació conté un control Entrada de text anomenat TextInput1. L'usuari introdueix els valors en aquest control per emmagatzemar-los en una base de dades.

L'usuari escriu Hola món a TextInput1.

Fórmula Descripció Resultat
IsMatch( TextInput1.Text, "Hello world" ) Prova si l'entrada de l'usuari coincideix exactament amb la cadena "Hola món". veritable
IsMatch( TextInput1.Text, "Good bye" ) Prova si l'entrada de l'usuari coincideix exactament amb la cadena "Adeu". fals
IsMatch( TextInput1.Text, "hello", Contains ) Prova si l'entrada de l'usuari conté la paraula "hola" (distingeix entre majúscules i minúscules). fals
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Prova si l'entrada de l'usuari conté la paraula "hola" (no distingeix entre majúscules i minúscules). veritable

Patrons predefinits

Fórmula Descripció Resultat
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Coincideix amb un número de la seguretat social dels Estats Units veritable
IsMatch( "joan@contoso.com", Email ) Coincideix amb una adreça electrònica veritable
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Coincideix amb una seqüència de dígits, un punt i, a continuació, zero o més dígits. veritable
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Coincideix amb una seqüència de dígits, un punt i, a continuació, zero o més dígits. No es mostra cap punt al text que s'ha de fer coincidir, de manera que aquest patró no té cap coincidència. fals

Expressions regulars

Fórmula Descripció Resultat
IsMatch( "986", "\d+" ) Coincideix amb un enter major que zero. veritable
IsMatch( "1.02", "\d+(\.\d\d)?" ) Coincideix amb un import monetari positiu. Si l'entrada conté un punt decimal, l'entrada també ha de contenir dos caràcters numèrics després del punt decimal. Per exemple, 3.00 és vàlid, però 3.1 no ho és. veritable
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Coincideix amb un import monetari positiu o negatiu. Si l'entrada conté un punt decimal, l'entrada també ha de contenir dos caràcters numèrics després del punt decimal. veritable
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Coincideix amb un número de la seguretat social dels Estats Units. Valida el format, el tipus i la longitud del camp d'entrada subministrat. La cadena que feu coincidir ha de constar de tres caràcters numèrics seguits d'un guió, dos caràcters numèrics seguits d'un guió i quatre caràcters numèrics. veritable
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Igual que l'exemple anterior, però un dels guions està fora de lloc a l'entrada. fals
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Valida una contrasenya segura, que ha de contenir vuit, nou o deu caràcters, a més d'un mínim d'un dígit i un caràcter alfabètic. La cadena no ha de contenir caràcters especials. fals

Exemples de Match i MatchAll

Fórmula Descripció Resultat
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extreu només la part del correu de la informació de contacte. {
correu electrònic: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extreu només la part del correu de la informació de contacte. No s'ha trobat cap adreça legal (no hi ha cap signe @), de manera que la funció torna blank. Buit
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extreu la part de la llengua, l'alfabet i la regió de l'etiqueta de llengua que torna la funció Language. Aquests resultats reflecteixen els Estats Units; consulteu la documentació de la funció Language per obtenir-ne més exemples. L'operador (?: agrupa els caràcters sense crear cap altra subcoincidència. {
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)?" ) Extreu les hores, els minuts i els segons d'un valor de duració de la ISO 8601. Els nombres extrets encara estan en una cadena de text; utilitzeu la funció Value per convertir-la en un número abans de fer-hi operacions matemàtiques. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Desglossem aquest darrer exemple. Si voleu convertir aquesta cadena en un valor de data i hora amb la funció Time, heu de passar les subcoincidències amb nom individualment. Per fer-ho, podeu utilitzar la funció With que opera al registre que torna Match:

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

En aquests exemples, afegiu un control Botó, definiu-ne la propietat OnSelect en aquesta fórmula i, a continuació, seleccioneu el botó:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Fórmula Descripció Resultat
Match( pangram, "THE", IgnoreCase ) Cerqueu totes les coincidències de "THE" a la cadena de text que conté la variable pangram. La cadena conté dues coincidències, però només es torna la primera perquè feu servir Match i no MatchAll. La columna SubMatches és buida perquè no s'ha definit cap subcoincidència. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Cerqueu totes les coincidències de "the" a la cadena de text que conté la variable pangram. La prova distingeix entre majúscules i minúscules, de manera que només es troba la segona instància de "the". La columna SubMatches és buida perquè no s'ha definit cap subcoincidència. MatchAll per al pangrama
MatchAll( pangram, "the", IgnoreCase ) Cerqueu totes les coincidències de "the" a la cadena de text que conté la variable pangram. En aquest cas, la prova distingeix entre majúscules i minúscules, per la qual cosa es troben totes dues instàncies de la paraula. La columna SubMatches és buida perquè no s'ha definit cap subcoincidència. MatchAll amb IgnoreCase
MatchAll( pangram, "\b\wo\w\b" ) Troba totes les paraules de tres lletres amb un "o" al mig. Fixeu-vos que "brown" s'exclou perquè no és una paraula de tres lletres i, per tant, no coincideix amb "\b" (límit de paraula). MatchAll per al pangrama amb b, wo, w i b
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Coincideix amb tots els caràcters entre "fox" i "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Per veure els resultats de MatchAll en una galeria:

  1. En una pantalla buida, inseriu un control Galeria vertical en blanc.

  2. Definiu la propietat Items de la galeria a MatchAll(pangram, "\w+") o MatchAll(pangram, MultipleLetters).

    Galeria d'elements

  3. Seleccioneu "Afegeix un element de la pestanya Insereix" al mig del control de la galeria per seleccionar la plantilla de la galeria:

  4. Afegiu un control Etiqueta a la plantilla de la galeria.

  5. Definiu la propietat Text de l'etiqueta com a ThisItem.FullMatch.

    La galeria s'omple amb cada paraula del nostre text d'exemple. Canvieu la mida de la plantilla de la galeria i el control d'etiqueta per veure totes les paraules en una pantalla.

    Propietat de text