Funciones IsMatch, Match y MatchAll

Se aplica a: Aplicaciones de lienzo Aplicaciones basadas en modelo Power Platform CLI

Prueba una coincidencia o extrae porciones de una cadena de texto en función de un patrón.

Descripción

La función IsMatch comprueba si una cadena de texto coincide con un patrón que puede incluir caracteres normales, patrones predefinidos o una expresión regular. Las funciones Match y MatchAll devuelven lo que coincidió, incluidas las coincidencias secundarias.

Use IsMatch para validar que un usuario ha escrito en un control Text input. Por ejemplo, puede confirmar si el usuario ha escrito una dirección de correo electrónico válida antes de que el resultado se guarde en el origen de datos. Si la entrada no coincide con los criterios, agregue otros controles que pidan al usuario que corrija la entrada.

Utilice Match para extraer la primera cadena de texto que coincida con un patrón y MatchAll para extraer todas las cadenas de texto que coincidan. También puede extraer subcoincidencias para analizar cadenas complejas.

Match devuelve un registro de información para la primera coincidencia encontrada y MatchAll devuelve una tabla de registros para cada coincidencia encontrada. El registro o registros contienen:

Column Type Descripción
subcoincidencia o subcoincidencias con nombre Text Cada subcoincidencia con nombre tendrá su propia columna. Cree una subcoincidencia con nombre usando (?<name>...) en la expresión regular. Si una subcoincidencia con nombre tiene el mismo nombre que una de las columnas predefinidas (a continuación), la subcoincidencia tiene prioridad y se genera una advertencia. Para evitar esta advertencia, cambie el nombre de la coincidencia secundaria.
FullMatch Texto Toda la cadena de texto coincidente.
StartMatch Número La posición inicial de la coincidencia dentro de la cadena de texto de entrada. El primer carácter de la cadena devuelve 1.
SubMatches Tabla de texto de una sola columna (Valor de columna) Tabla de subcoincidencias con nombre y sin nombre en el orden en que aparecen en la expresión regular. En general, las subcoincidencias con nombre son más fáciles de trabajar y se recomiendan. Utilice la función ForAll o las funciones Last( FirstN( ... ) ) para trabajar con una subcoincidencia individual. Si no se definen subcoincidencias en la expresión regular, esta tabla estará presente pero vacía.

Estas funciones admiten MatchOptions. De forma predeterminada:

  • Estas funciones realizan una coincidencia entre mayúsculas y minúsculas. Utilice MatchOptions.IgnoreCase para realizar coincidencias con distinción entre mayúsculas y minúsculas.
  • IsMatch coincide con toda la cadena de texto (MatchOption Complete), mientras que Match y MatchAll buscan una coincidencia en cualquier lugar de la cadena de texto (MatchOption Contains). Utilice Complete, Contains, BeginsWith o EndsWith según corresponda a su escenario.

IsMatch devuelve true si la cadena de texto coincide con el patrón o false si no es así. Match devuelve blank si no se encuentra ninguna coincidencia que pueda probarse con la función IsBlank. MatchAll devuelve una tabla vacía si no se encuentra ninguna coincidencia que pueda probarse con la función IsEmpty.

Si usa MatchAll para dividir una cadena de texto, considere usar la función Split, que es más fácil de usar y más rápida.

Patrones

La clave para usar estas funciones está en describir el patrón de coincidencia. El patrón en una cadena de texto se describe como una combinación de:

  • Caracteres normales, como "abc" o "123".
  • Patrones predefinidos, como Letter, MultipleDigits o Email. (La enumeración Match define estos patrones).
  • Códigos de expresiones regulares, como "\d+\s+\d+" o "[a-z]+".

Combine estos elementos mediante el operador de concatenación de cadenas &. Por ejemplo, "abc" & Digit & "\s+" es un patrón válido que busca la coincidencia de los caracteres "a", "b" y "c", seguido de un dígito del 0 al 9, seguido de al menos un carácter de espacio en blanco.

Caracteres normales

El patrón más sencillo es una secuencia de caracteres normales que deben coincidir exactamente.

Por ejemplo, cuando se usa con la función IsMatch, la cadena "Hello" coincide con el patrón "Hello" exactamente. Ni más ni menos. La cadena "hello!" no coincide con el patrón por el signo de exclamación del final y porque el uso de mayúsculas/minúsculas es incorrecto para la letra "h". (Consulte MatchOptions para ver formas de modificar este comportamiento).

En el lenguaje del patrón, algunos caracteres están reservados para fines especiales. Para usar estos caracteres, coloque delante una \ (barra diagonal inversa) para indicar que el carácter se debe usar literalmente o utilice uno de los patrones predefinidos descritos más adelante en este tema. En esta tabla se enumeran los caracteres especiales:

Carácter especial Descripción
. punto
? signo de interrogación
* asterisco
+ más
( ) paréntesis
[ ] corchetes
{ } llaves
^ caret
$ signo de dólar
| barra vertical
\ barra diagonal inversa

Por ejemplo, puede hacer coincidir "¿Hola?" usando el patrón "Hola\?" con una barra invertida antes del signo de interrogación.

Patrones predefinidos

Los patrones predefinidos proporcionan una manera sencilla de buscar coincidencia con un carácter de un conjunto de caracteres o con una secuencia de varios caracteres. Use el operador de concatenación de cadenas & para combinar sus propias cadenas de texto con miembros de la enumeración Match:

Enumeración Match Descripción Expresión regular
Any Busca la coincidencia con cualquier carácter. .
Comma Busca la coincidencia con una coma. ,
Digit Busca la coincidencia con un único dígito (del "0" al "9"). \d
Enviar por correo electrónico Busca la coincidencia con una dirección de correo electrónico que contiene un símbolo "arroba" ("@") y un nombre de dominio que contiene un punto (".") .+\@.+\\.[^\\.]{2,}
Hyphen Busca la coincidencia con un guion. \-
LeftParen Busca la coincidencia con un paréntesis izquierdo "(". \(
Letter Busca la coincidencia con una letra. \p{L}
MultipleDigits Busca la coincidencia con uno o varios dígitos. \d+
MultipleLetters Busca la coincidencia con una o varias letras. \p{L}+
MultipleNonSpaces Busca la coincidencia con uno o varios caracteres que no agregan espacios en blanco (no espacio, tabulación o nueva línea). \S+
MultipleSpaces Busca la coincidencia con uno o varios caracteres que agregan espacio en blanco (espacio, tabulación o nueva línea). \s+
NonSpace Busca la coincidencia con un único carácter que no agrega espacios en blanco. \S
OptionalDigits Busca la coincidencia con cero, uno o más dígitos. \d*
OptionalLetters Busca la coincidencia con cero, una o más letras. \p{L}*
OptionalNonSpaces Busca la coincidencia con cero, uno o más caracteres que no agregan espacio en blanco. \S*
OptionalSpaces Busca la coincidencia con cero, uno o más caracteres que agregan espacio en blanco. \s*
Period Busca la coincidencia con un punto ("."). \.
RightParen Busca la coincidencia con un paréntesis derecho ")". \)
Space Busca la coincidencia con un carácter que agrega espacio en blanco. \s
Tab Coincide con un carácter de tabulador. \t

Por ejemplo, el patrón "A" & MultipleDigits buscará la coincidencia con la letra "A" seguido de uno o varios dígitos.

Expresiones regulares

El patrón que utilizan estas funciones es una expresión regular. Los caracteres normales y los patrones predefinidos que se han descrito anteriormente en este tema ayudan a crear expresiones regulares.

Las expresiones regulares son muy eficaces, están disponibles en muchos lenguajes de programación y se usan para multitud de propósitos. También a menudo pueden parecer una secuencia aleatoria de signos de puntuación. En este artículo no se pueden describir todos los aspectos de las expresiones regulares, pero existe una gran cantidad de información, tutoriales y herramientas disponibles en Internet.

Las expresiones regulares se encuentran en distintos dialectos y Power Apps emplea una variante del dialecto JavaScript. Vea sintaxis de expresiones regulares para una introducción a la sintaxis. Se admiten subcoincidencias con nombre (a veces llamadas grupos de captura con nombre):

  • Subcoincidencias con nombre: (?<name> ...)
  • Referencias posteriores con nombre: \k<name>

En la tabla de enumeración Match anterior en este tema, cada enumeración aparece en la misma fila que su correspondiente expresión regular.

Opciones de coincidencia

También puede modificar el comportamiento de estas funciones mediante la especificación de una o más opciones, que se pueden combinar con el operador de concatenación de cadenas (&).

Enumeración MatchOptions Description Impacto en una expresión regular
MatchOptions.BeginsWith El patrón debe coincidir desde el principio del texto. Agrega un ^ al principio de la expresión regular.
MatchOptions.Complete Valor predeterminado de IsMatch. El patrón debe coincidir con la cadena entera de texto, de principio a fin. Agrega ^ al principio y $ al final de la expresión regular.
MatchOptions.Contains Valor predeterminado para Match y MatchAll. El patrón debe aparecer en alguna parte del texto pero no tiene que ser al principio o al final. No modifica la expresión regular.
MatchOptions.EndsWith El patrón debe coincidir con el final de la cadena de texto. Agrega $ al final de la expresión regular.
MatchOptions.IgnoreCase Trata las letras mayúsculas y minúsculas como idénticas. De forma predeterminada, la búsqueda de coincidencia distingue mayúsculas y minúsculas. No modifica la expresión regular. Esta opción es equivalente al modificador estándar "i" para expresiones regulares.
MatchOptions.Multiline Busca la coincidencia entre varias líneas. No modifica la expresión regular. Esta opción es equivalente al modificador estándar "m" para expresiones regulares.

Usar MatchAll es equivalente a usar el modificador estándar "g" para expresiones regulares.

Sintaxis

IsMatch( Text, Pattern [, Options ] )

  • Text: requerido. La cadena de texto que se va a probar.
  • Pattern: requerido. El patrón que se va a probar como una cadena de texto. Concatene los patrones predefinidos que define la enumeración Match o proporcione una expresión regular. Pattern debe ser una fórmula constante sin variables, orígenes de datos u otras referencias dinámicas que cambien a medida que se ejecuta la aplicación.
  • Options: valor opcional. Una combinación de cadenas de texto de valores de enumeración MatchOptions. De forma predeterminada, se usa MatchOptions.Complete.

Match( Text, Pattern [, Options ] )

  • Text: requerido. La cadena de texto que debe coincidir.
  • Pattern: requerido. El patrón que debe coincidir como una cadena de texto. Concatene los patrones predefinidos que define la enumeración Match o proporcione una expresión regular. Pattern debe ser una fórmula constante sin variables, orígenes de datos u otras referencias dinámicas que cambien a medida que se ejecuta la aplicación.
  • Options: valor opcional. Una combinación de cadenas de texto de valores de enumeración MatchOptions. De forma predeterminada, se usa MatchOptions.Contains.

MatchAll( Text, Pattern [, Options ] )

  • Text: requerido. La cadena de texto que debe coincidir.
  • Pattern: requerido. El patrón que debe coincidir como una cadena de texto. Concatene los patrones predefinidos que define la enumeración Match o proporcione una expresión regular. Pattern debe ser una fórmula constante sin variables, orígenes de datos u otras referencias dinámicas que cambien a medida que se ejecuta la aplicación.
  • Options: valor opcional. Una combinación de cadenas de texto de valores de enumeración MatchOptions. De forma predeterminada, se usa MatchOptions.Contains.

Ejemplos de IsMatch

Caracteres normales

Imagine que la aplicación contiene un control Text input denominado TextInput1. El usuario escribe valores en este control para almacenarlos en una base de datos.

El usuario escribe Hello world en TextInput1.

Fórmula Descripción Resultado
IsMatch( TextInput1.Text, "Hello world" ) Comprueba si la entrada del usuario coincide exactamente con la cadena "Hello world". true
IsMatch( TextInput1.Text, "Good bye" ) Comprueba si la entrada del usuario coincide exactamente con la cadena "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Comprueba si la entrada del usuario contiene la palabra "hello" (con distinción de mayúsculas y minúsculas). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Comprueba si la entrada del usuario contiene la palabra "hello" (con distinción de mayúsculas y minúsculas). true

Patrones predefinidos

Fórmula Descripción Resultado
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Busca la coincidencia con un número de la Seguridad Social de Estados Unidos. true
IsMatch( "joan@contoso.com", Email ) Busca la coincidencia con una dirección de correo electrónico. true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Busca la coincidencia con una secuencia de dígitos, un punto y luego cero o más dígitos. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Busca la coincidencia con una secuencia de dígitos, un punto y luego cero o más dígitos. Un punto no aparece en el texto que se debe cotejar, así que no hay coincidencia con este patrón. false

Expresiones regulares

Fórmula Descripción Resultado
IsMatch( "986", "\d+" ) Busca la coincidencia con un número entero mayor que cero. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Busca la coincidencia con un importe de divisa positivo. Si la entrada contiene un separador decimal, la entrada también debe contener dos caracteres numéricos después de la coma decimal. Por ejemplo, 3,00 es válido, pero no 3,1. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Busca la coincidencia con un importe de divisa negativo. Si la entrada contiene un separador decimal, la entrada también debe contener dos caracteres numéricos después de la coma decimal. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Busca la coincidencia con un número de la Seguridad Social de Estados Unidos. Valida el formato, el tipo y la longitud del campo de entrada proporcionado. La cadena con la que se busca coincidencia debe estar formada por tres caracteres numéricos seguidos de un guion, luego dos caracteres numéricos seguidos de un guion y luego cuatro caracteres numéricos. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Lo mismo que el ejemplo anterior, pero uno de los guiones está fuera de lugar en la entrada. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Valida una contraseña segura, que debe contener ocho, nueve o 10 caracteres, además de al menos un dígito y al menos un carácter alfabético. La cadena no debe contener caracteres especiales. false

Ejemplos de Match y MatchAll

Fórmula Descripción Resultado
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extrae solo la parte del correo electrónico de la información de contacto. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrae solo la parte del correo electrónico de la información de contacto. No se encuentra ninguna dirección legal (no hay signo @), por lo que la función devuelve blank. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrae las partes de idioma, alfabeto y región de la etiqueta de idioma que devuelve la función Language. Estos resultados reflejan los Estados Unidos; vea la documentación de la función Language para más ejemplos. El operador (?: agrupa los caracteres sin crear otra 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 las horas, minutos y segundos de un valor de duración ISO 8601. Los números extraídos todavía están en una cadena de texto; utilice la función Value para convertirla en un número antes de realizar operaciones matemáticas con ella. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Analicemos ese último ejemplo. Si desea convertir esta cadena en un valor de fecha/hora utilizando la función Time, debe pasar las subcoincidencias con nombre individualmente. Para ello, puede usar la función With que opera en el registro devuelve Match:

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

Para estos ejemplos, agregue un control Button, establezca su propiedad OnSelect en esta fórmula y luego seleccione el botón:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Fórmula Descripción Resultado
Match( pangram, "THE", IgnoreCase ) Encuentra todas las coincidencias de "THE" en la cadena de texto que contiene la variable pangram. La cadena contiene dos coincidencias, pero solo se devuelve la primera porque está utilizando Match, no MatchAll. La columna SubMatches está vacía porque no se definieron subcoincidencias. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Encuentra todas las coincidencias de "the" en la cadena de texto que contiene la variable pangram. La prueba distingue entre mayúsculas y minúsculas, por lo que solo se encuentra la segunda instancia de "the". La columna SubMatches está vacía porque no se definieron subcoincidencias. MatchAll para pangram.
MatchAll( pangram, "the", IgnoreCase ) Encuentra todas las coincidencias de "the" en la cadena de texto que contiene la variable pangram. En este caso, la prueba no distingue entre mayúsculas y minúsculas, por lo que se encuentran ambas instancias de la palabra. La columna SubMatches está vacía porque no se definieron subcoincidencias. MatchAll con IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Encuentra todas las palabras de tres letras con una "o" en el medio. Tenga en cuenta que "marrón" queda excluida, porque no es una palabra de tres letras y, por lo tanto, no coincide con "\b" (límite de la palabra). MatchAll para pangram con b, wo, w y b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Coincide con todos los caracteres entre "fox" y "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Para ver los resultados de MatchAll en una galería:

  1. En una pantalla vacía, inserte un control Gallery vertical en blanco.

  2. Establezca la propiedad Items de la galería en MatchAll( pangram, "\w+" ) o MatchAll( pangram, MultipleLetters ).

    Galería de elementos.

  3. Seleccione "Agregar un elemento de la pestaña Insertar" en el medio del control de galería para seleccionar la plantilla de la galería.

  4. Agregue un control Label a la plantilla de la galería.

  5. Establezca la propiedad Text de la etiqueta en ThisItem.FullMatch.

    La galería se llena con cada palabra en nuestro texto de ejemplo. Cambie la plantilla de la galería y el control de la etiqueta para ver todas las palabras en una pantalla.

    Propiedad Text.