Comparteix a través de


Funcions IsMatch, Match i MatchAll

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

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 torna un registre d'informació per a la primera coincidència que es troba, mentre que MatchAll torna una taula de registres de totes les coincidències trobades. 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.
FullMatch Text Tota la cadena de text que ha coincidit.
StartMatch 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.
SubMatches 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 realitzar coincidències que distingeixen entre majúscules i minúscules.
  • IsMatch coincideix amb la cadena de text sencera (MatchOption Completa), mentre que Match i MatchAll cerquen una coincidència a qualsevol part de la cadena de text (MatchOption Conté). 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. Match torna en blanc si no es troba cap coincidència que es pugui provar amb la funció IsBlank. MatchAll torna 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]+".

Combineu aquests elements utilitzant l'operador de concatenació de cadenes&. Per exemple, "abc" & Digit & "\s+" és un patró vàlid que coincideix amb els caràcters "a", "b" i "c", seguit d'un dígit del 0 al 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 string-concatenation per combinar les vostres pròpies cadenes de text amb els membres de l'enumeració Match :

Match enum Descripció Expressió regular
Any Coincideix amb qualsevol caràcter. .
Comma Coincideix amb una coma. ,
Digit Coincideix amb un sol dígit (del "0" al "9"). \d
Email Coincideix amb una adreça electrònica que conté un símbol "arrova" ("@") i un nom de domini que conté un punt (".") .+\@.+\\.[^\\.]{2,}
Hyphen Coincideix amb un guió. \-
LeftParen Coincideix amb un parèntesi esquerre "(". \(
Letter Coincideix amb una lletra. \p{L}
MultipleDigits Coincideix amb un o més dígits. \d+
MultipleLetters 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+
MultipleSpaces Coincideix amb un o més caràcters que afegeixen un espai en blanc (espai, tabulador o salt de línia). \s+
NonSpace Coincideix amb un únic caràcter que no afegeix un espai en blanc. \S
OptionalDigits Coincideix amb cap, un o més dígits. \d*
OptionalLetters Coincideix amb cap, una o més lletres. \p{L}*
OptionalNonSpaces Coincideix amb cap, un o més caràcters que no afegeixen un espai en blanc. \S*
OptionalSpaces Coincideix amb cap, un o més caràcters que afegeixen un espai en blanc. \s*
Period Coincideix amb un punt ("."). \.
RightParen Coincideix amb un parèntesi dret ")". \)
Space Coincideix amb un caràcter que afegeix un espai en blanc. \s
Tab 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 utilitzant l'operador de concatenació de cadenes (&).

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.Conté 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, Patró, [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 ni altres referències dinàmiques que canviïn mentre s'executa l'aplicació.
  • Opcions: opcional. Una combinació de cadena de text de valors MatchOptions enum. Per defecte, s'utilitza MatchOptions.Completa.

Match(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 ni altres referències dinàmiques que canviïn mentre 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 ni altres referències dinàmiques que canviïn mentre 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". true
IsMatch( TextInput1.Text, "Good bye" ) Prova si l'entrada de l'usuari coincideix exactament amb la cadena "Adeu". false
IsMatch( TextInput1.Text, "hello", Contains ) Prova si l'entrada de l'usuari conté la paraula "hola" (distingeix entre majúscules i minúscules). false
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). true

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 true
IsMatch( "joan@contoso.com", Email ) Coincideix amb una adreça electrònica true
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. true
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. false

Expressions regulars

Fórmula Descripció Resultat
IsMatch( "986", "\d+" ) Coincideix amb un enter major que zero. true
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. true
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. true
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. true
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. false
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. false

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. blank
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