Funcións de IsMatch, Match e MatchAll

Aplícase a: Aplicacións de lona Aplicacións Power Platform dirixidas por modelo CLI

Proba unha coincidencia ou extrae partes dunha cadea de texto baseadas nun padrón.

Descripción

A función IsMatch comproba se unha cadea de texto coincide cun padrón que pode incluír caracteres comúns, padróns predefinidos ou unha expresión regular. As funcións Match e MatchAll devolven o que se emparellou, incluídas subcoincidencias.

Use IsMatch para validar o que un usuario escribiu nun control de Entrada de texto. Por exemplo, pode confirmar se o usuario introduciu un enderezo de correo electrónico válido antes de que o resultado se garde na súa orixe de datos. Se a entrada non coincide cos seus criterios, engada outros controis que lle soliciten ao usuario que corrixa a entrada.

Use Match para extraer a primeira cadea de texto que coincida cun padrón e MatchAll para extraer todas as cadeas de texto que coincidan. Tamén pode extraer subcoincidencias para analizar cadeas complexas.

Match devolve un rexistro de información para a primeira coincidencia atopada e MatchAll devolve unha táboa de rexistros de cada coincidencia atopada. O rexistro ou rexistros conteñen:

Column Tipo Descripción
subcoincidencia ou subcoincidencias nomeadas Mensaxe de texto Cada subcoincidencia nomeada terá a súa propia columna. Cree unha subcoincidencia nomeada usando (? <nome>...) na expresión regular. Se unha subcoincidencia nomeada ten o mesmo nome que unha das columnas predefinidas (a continuación), a subcoincidencia ten prioridade e xérase un aviso. Para evitar este aviso, cambie o nome da subcoincidencia.
FullMatch Texto Toda a cadea de texto coincide.
StartMatch Número A posición inicial da coincidencia dentro da cadea de texto de entrada. O primeiro carácter da cadea devolve 1.
SubMatches Táboa de texto dunha única columna (columna Valor) A táboa das subcoincidencias nomeadas e sen nome na orde na que aparecen na expresión regular. Xeralmente, é máis fácil traballar con subcoincidencias nomeadas e recoméndase. Use a función ForAll ou as funcións Last ( FirstN ( ... ) ) para traballar cunha subcoincidencia individual. Se non se definen subcoincidencias na expresión regular, esta táboa estará presente pero baleira.

Estas funcións son compatibles con MatchOptions. Por defecto:

  • Estas funcións realizan unha coincidencia que diferencia entre maiúsculas e minúsculas. Use MatchOptions.IgnoreCase para realizar partidos case insensibles.
  • IsMatch coincide coa cadea de texto enteira (Complete MatchOption), mentres que Match e MatchAll buscan unha coincidencia en calquera parte da cadea de texto (Contains MatchOption). Use Complete, Contains, BeginsWith ou EndsWith segundo corresponda para o seu escenario.

IsMatch devolve verdadeiro se a cadea de texto coincide co padrón ou falso se non o fai. Match devolve en branco se non se atopa ningunha coincidencia que poida probarse coa función IsBlank. MatchAll devolve unha táboa en branco se non se atopa ningunha coincidencia que poida probarse coa función IsEmpty.

Se está usando MatchAll para dividir unha cadea de texto, considere o uso da función Split, que é máis sinxela de usar e máis rápida.

Tramas

A clave para empregar estas funcións está na descrición do padrón que corresponde. Vostede describe o padrón nunha cadea de texto como unha combinación de:

  • Caracteres comúns, como "abc" ou "123".
  • Padróns predefinidos, como Letter, MultipleDigits ou Email. (A enumeración Match define estes padróns).
  • Códigos de expresión regular, como "\d+\s+\d+" ou "[az]+".

Combina estes elementos usando o operador de concatenación de cadeas. Por exemplo, "abc" & Digit & "\s+" é un patrón válido que coincide cos caracteres "a", "b" e " c", seguido dun díxito de 0 a 9, seguido de polo menos un carácter de espazo branco.

Caracteres comúns

O padrón máis sinxelo é unha secuencia de caracteres comúns que deben coincidir exactamente.

Por exemplo, cando se usa coa función IsMatch, a cadea "Hello" coincide co padrón "Hello" exactamente. Nin máis nin menos. A cadea "hola!" non coincide co padrón debido ao signo de exclamación do final e porque a letra "h" está en minúscula. (Vexa MatchOptions para consultar formas de modificar este comportamento).

Na linguaxe de padróns, certos caracteres resérvanse para fins especiais. Para empregar estes caracteres, poña de prefixo ao carácter unha \ (barra invertida) para indicar que o carácter debe ser tomado literalmente, ou use un dos padróns predefinidos descritos máis adiante neste tema. Esta táboa enumera os caracteres especiais:

Carácter especial Descripción
. Punto
? signo de interrogación
* asterisco
+ plus
( ) parénteses
[ ] corchetes
{ } chaves
^ acento circunflexo
$ signo de dólar
| barra vertical
\ barra invertida

Por exemplo, pode facer coincidir "Ola?" utilizando o padrón "Hello\?" cunha barra invertida antes do signo de interrogación.

Padróns predefinidos

Os padróns predefinidos proporcionan unha forma sinxela de combinar un ou un conxunto de caracteres ou unha secuencia de varios caracteres. Use o operador de concatenación de cadeas e para combinar as súas propias cadeas de texto cos membros do enum do Match :

Enumeración Match Descripción Expresión regular
Any Busca coincidencias con calquera carácter. .
Comma Busca coincidencias cunha coma. ,
Digit Busca coincidencias cun único díxito ("0" a "9"). \d
Email Busca coincidencias cun enderezo de correo electrónico que contén un símbolo de "arroba" ("@") e un nome de dominio que contén un punto (".") .+\@.+\\.[^\\.]{2,}
Hyphen Busca coincidencias cun guión. \-
LeftParen Busca coincidencias cun paréntese esquerdo "(". \(
Letter Busca coincidencias cunha letra. \p{L}
MultipleDigits Busca coincidencias cun ou máis díxitos. \d+
MultipleLetters Busca coincidencias cunha ou máis letras. \p{L}+
MultipleNonSpaces Busca coincidencias cun ou máis caracteres que non engaden espazo en branco (non espazo, separador ou liña nova). \S+
MultipleSpaces Busca coincidencias cun ou máis caracteres que engaden espazo en branco (espazo, separador ou liña nova). \s+
NonSpace Busca coincidencias cun único carácter que non engade espazo en branco. \S
OptionalDigits Busca coincidencias con cero, un ou máis díxitos. \d*
OptionalLetters Busca coincidencias con cero, unha ou máis letras. \p{L}*
OptionalNonSpaces Busca coincidencias con cero, un ou máis caracteres que non engaden espazo en branco. \S*
OptionalSpaces Busca coincidencias con cero, un ou máis caracteres que engaden espazo en branco. \s*
Period Busca coincidencias cun punto ("."). \.
RightParen Busca coincidencias cun paréntese dereito ")". \)
Space Busca coincidencias cun carácter que engade espazo en branco. \s
TAB Coincide cun carácter de tabulación. \t

Por exemplo, o patrón "A" e MultipleDigits coincidirá coa letra "A" seguida dun ou máis díxitos .

Expresións regulares

O padrón que empregan estas funcións é unha expresión regular. Os caracteres comúns e os padróns predefinidos que se describen anteriormente neste tema axudan a crear expresións regulares.

As expresións regulares son moi potentes, dispoñibles en moitas linguaxes de programación e úsanse para unha gran variedade de fins. Tamén poden a miúdo ser unha secuencia aleatoria de signos de puntuación. Este artigo non describe todos os aspectos das expresións regulares, pero na web hai unha gran cantidade de información, titoriais e ferramentas.

As expresións regulares veñen en diferentes dialectos e Power Apps usa unha variante do dialecto JavaScript. Vexa sintaxe de expresións regulares para obter unha introdución á sintaxe. As subcoincidencias nomeadas (ás veces chamadas grupos de captura nomeados) son compatibles:

  • Subcoincidencias nomeadas: (?<name> ...)
  • Referencias inversas nomeadas: \k<name>

Na táboa de enumeración Match anterior deste tema, cada enumeración aparece na mesma liña que a súa expresión regular correspondente.

Opcións de coincidencia

Pode modificar o comportamento destas funcións especificando unha ou varias opcións, que pode combinar usando o operador de concatenación de cadeas (&).

Enumeración MatchOptions Descripción Impacto nunha expresión regular
MatchOptions.BeginsWith O padrón debe coincidir desde o comezo do texto. Engade un ^ ao comezo da expresión regular.
MatchOptions.Complete Valor predefinido de IsMatch. O padrón debe coincidir con toda a cadea de texto, desde o comezo ao final. Engade un ^ ao comezo e un $ ao final da expresión regular.
MatchOptions.Contén Valor predefinido para Match e MatchAll. O padrón debe aparecer nalgún lugar do texto, pero non é preciso que o comece nin finalice. Non modifica a expresión regular.
MatchOptions.EndsWith O padrón debe coincidir co final da cadea de texto. Engade un $ ao final da expresión regular.
MatchOptions.IgnoreCase Trata as letras maiúsculas e minúsculas como idénticas. Por defecto, as coincidencias distinguen entre maiúsculas e minúsculas. Non modifica a expresión regular. Esta opción é o equivalente ao modificador estándar "i" para as expresións regulares.
MatchOptions.Multiline Busca coincidencias en varias liñas. Non modifica a expresión regular. Esta opción é o equivalente ao modificador estándar "m" para as expresións regulares.

Usar MatchAll equivale a usar o modificador estándar "g" para expresións regulares.

Sintaxe

IsMatch ( Texto, Padrón [, Opcións ])

  • Text – Obrigatorio. A cadea de texto para probar.
  • Pattern – Obrigatorio. O padrón para probar como cadea de texto. Concatene os padróns predefinidos que a enumeración Match define ou forneza unha expresión regular. O padrón debe ser unha fórmula constante sen variables, fontes de datos ou outras referencias dinámicas que cambian a medida que se executa a aplicación.
  • Options – Opcional. Unha combinación de cadea de texto dos valores da enumeración MatchOptions. Por defecto, úsase MatchOptions.Complete.

Match ( Texto, Padrón [, Opcións ])

  • Text – Obrigatorio. A cadea de texto para buscar coincidencias.
  • Pattern – Obrigatorio. O padrón para buscar coincidencias como cadea de texto. Concatene os padróns predefinidos que a enumeración Match define ou forneza unha expresión regular. O padrón debe ser unha fórmula constante sen variables, fontes de datos ou outras referencias dinámicas que cambian a medida que se executa a aplicación.
  • Options – Opcional. Unha combinación de cadea de texto dos valores da enumeración MatchOptions. Por defecto, úsase MatchOptions.Contains.

MatchAll ( Texto, Padrón [, Opcións ])

  • Text – Obrigatorio. A cadea de texto para buscar coincidencias.
  • Pattern – Obrigatorio. O padrón para buscar coincidencias como cadea de texto. Concatene os padróns predefinidos que a enumeración Match define ou forneza unha expresión regular. O padrón debe ser unha fórmula constante sen variables, fontes de datos ou outras referencias dinámicas que cambian a medida que se executa a aplicación.
  • Options – Opcional. Unha combinación de cadea de texto dos valores da enumeración MatchOptions. Por defecto, úsase MatchOptions.Contains.

Exemplos de IsMatch

Caracteres comúns

Imaxine que a súa aplicación contén un control de Entrada de texto nomeado TextInput1. O usuario introduce valores neste control para ser almacenados nunha base de datos.

O usuario escribe Hello world dentro de TextInput1.

Fórmula Descripción Resultado
IsMatch( TextInput1.Text, "Hello world" ) Comproba se a entrada do usuario coincide exactamente coa cadea "Hello world". true
IsMatch( TextInput1.Text, "Good bye" ) Comproba se a entrada do usuario coincide exactamente coa cadea "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Proba se a entrada do usuario contén a palabra "hello" (diferencia entre minúsculas e minúsculas). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Comproba se a entrada do usuario contén a palabra "hello" (non diferencia entre minúsculas e minúsculas). true

Padróns predefinidos

Fórmula Descripción Resultado
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Busca coincidencias cun número da Seguridade Social dos Estados Unidos true
IsMatch( "joan@contoso.com", Email ) Busca coincidencias cun enderezo de correo electrónico true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Busca coincidencias cunha secuencia de díxitos, un punto e logo cero ou máis díxitos. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Busca coincidencias cunha secuencia de díxitos, un punto e logo cero ou máis díxitos. Non aparece un punto no texto que coincida, polo que este padrón non coincide. false

Expresións regulares

Fórmula Descripción Resultado
IsMatch( "986", "\d+" ) Busca coincidencias cun enteiro maior que cero. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Busca coincidencias cunha cantidade en moeda positiva. Se a entrada contén un punto decimal, a entrada tamén debe conter dous caracteres numéricos despois do punto decimal. Por exemplo, 3.00 é válido, pero 3.1 non. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Busca coincidencias cunha cantidade en moeda positiva ou negativa. Se a entrada contén un punto decimal, a entrada tamén debe conter dous caracteres numéricos despois do punto decimal. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Busca coincidencias cun número da Seguridade Social dos Estados Unidos. Valida o formato, tipo e lonxitude do campo de entrada subministrado. A cadea para buscar coincidencias debe estar composta por tres caracteres numéricos seguidos dun trazo, logo dous caracteres numéricos seguidos dun trazo e, a continuación, catro caracteres numéricos. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) O mesmo que o exemplo anterior, pero un dos guións está fóra de lugar na entrada. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Valida un contrasinal forte, que debe conter oito, nove ou 10 caracteres, ademais de polo menos un díxito e polo menos un carácter alfabético. A cadea non debe conter caracteres especiais. false

Exemplos de Match e MatchAll

Fórmula Descripción Resultado
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extrae só a parte do correo electrónico da información de contacto. {
correo electrónico: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrae só a parte do correo electrónico da información de contacto. Non se atopa ningunha dirección legal (non hai signo @), polo que a función devolve blank. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrae as porcións de idioma, script e rexión da etiqueta de idioma que a función Language devolve. Estes resultados reflicten os Estados Unidos; vexa a documentación da función Language para obter máis exemplos. O operador (?: agrupa caracteres sen crear outra subcoincidencia. {
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)?" ) Extrae as horas, minutos e segundos dun valor de duración ISO 8601. Os números extraídos seguen nunha cadea de texto; use a función Value para convertelo nun número antes de que se realicen operacións matemáticas nel. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Analicemos ese último exemplo. Se quería converter esta cadea nun valor de data/hora usando a función Time, debe pasar individualmente as subcoincidencias nomeadas. Para iso, pode usar a función With que opera no rexistro que Match devolve:

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

Para estes exemplos, engada un control de Botón, establézao a súa propiedade OnSelect nesta fórmula e logo seleccione o botón:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Fórmula Descripción Resultado
Match( pangram, "THE", IgnoreCase ) Atopa todas as coincidencias de "THE" na cadea de texto que contén a variable pangram. A cadea contén dúas coincidencias, pero só a primeira será devolta porque está usando Match e non MatchAll. A columna SubMatches está baleira porque non se definiron subcoincidencias. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Atopa todas as coincidencias de "the" na cadea de texto que contén a variable pangram. A proba diferencia entre maiúsculas e minúsculas, polo que só se atopa a segunda instancia de "the". A columna SubMatches está baleira porque non se definiron subcoincidencias. MatchAll para pangram.
MatchAll( pangram, "the", IgnoreCase ) Atopa todas as coincidencias de "the" na cadea de texto que contén a variable pangram. Neste caso, a proba non é sensible a maiúsculas e minúsculas, polo que se atopan ambas as dúas instancias da palabra. A columna SubMatches está baleira porque non se definiron subcoincidencias. MatchAll con IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Atopa todas as palabras de tres letras cunha "o" no medio. Teña en conta que "brown" está excluído porque non se trata dunha palabra de tres letras e, polo tanto, non coincide con "\b" (límite de palabras). MatchAll para pangram con b, wo, w e b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Buscas as coincidencias con todos os caracteres entre "fox" e "dog". {
entre: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Para ver os resultados de MatchAll nunha galería:

  1. Nunha pantalla baleira, insira un control vertical en branco de Galería.

  2. Estableza a propiedade Items da galería en MatchAll ( pangram, "\w+" ) ou MatchAll( pangram, MultipleLetters ).

    Galería de elementos.

  3. Seleccione "Engadir un elemento da lapela Inserir" no medio do control da galería para seleccionar o modelo da galería.

  4. Engada un control de Etiqueta ao modelo da galería.

  5. Estableza a propiedade Text da etiqueta a ThisItem.FullMatch.

    A galería está chea con cada palabra do noso texto de exemplo. Redimensione o modelo da galería e o control das etiquetas para ver todas as palabras nunha pantalla.

    Propiedade Text.