Funciones IsMatch, Match y MatchAll
Se aplica a: Aplicaciones de Canvas Aplicaciones basadas en modelos Power Pages 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 |
---|---|---|
sub-partido o sub-partidos nombrados | 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. |
Partido completo | Texto | Toda la cadena de texto coincidente. |
Iniciar partido | 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. |
Subpartidos | 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 (Complete MatchOption), mientras que Match y MatchAll buscan una coincidencia en cualquier parte de la cadena de texto (Contains MatchOption). Utilice Complete, Contains, BeginsWith o EndsWith según corresponda a su escenario.
IsMatch devuelve verdadero si la cadena de texto coincide con el patrón o falso si no lo hace. Match devuelve blanco 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 |
---|---|---|
Cualquier | Busca la coincidencia con cualquier carácter. | . |
Coma | Busca la coincidencia con una coma. | , |
Dígito | Busca la coincidencia con un único dígito (del "0" al "9"). | \d |
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,} |
Guión | Busca la coincidencia con un guion. | \- |
Paréntesis izquierda | Busca la coincidencia con un paréntesis izquierdo "(". | \( |
Carta | Busca la coincidencia con una letra. | \p{L} |
Múltiples dígitos | Busca la coincidencia con uno o varios dígitos. | \d+ |
Varias letras | Busca la coincidencia con una o varias letras. | \p{L}+ |
Múltiples no espacios | Busca la coincidencia con uno o varios caracteres que no agregan espacios en blanco (no espacio, tabulación o nueva línea). | \S+ |
Múltiples espacios | Busca la coincidencia con uno o varios caracteres que agregan espacio en blanco (espacio, tabulación o nueva línea). | \s+ |
No-Espacio | Busca la coincidencia con un único carácter que no agrega espacios en blanco. | \S |
Dígitos opcionales | Busca la coincidencia con cero, uno o más dígitos. | \d* |
Letras opcionales | Busca la coincidencia con cero, una o más letras. | \p{L}* |
OpcionalNonSpaces | Busca la coincidencia con cero, uno o más caracteres que no agregan espacio en blanco. | \S* |
Espacios opcionales | Busca la coincidencia con cero, uno o más caracteres que agregan espacio en blanco. | \s* |
Período | Busca la coincidencia con un punto ("."). | \. |
Paren derecho | Busca la coincidencia con un paréntesis derecho ")". | \) |
Espacio | Busca la coincidencia con un carácter que agrega espacio en blanco. | \s |
Pestaña | 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 |
---|---|---|
Opciones de coincidencia.Comienza con | El patrón debe coincidir desde el principio del texto. | Agrega un ^ al principio de la expresión regular. |
Opciones de coincidencia.Completar | 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. |
Opciones de coincidencia.Contiene | 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. |
Opciones de coincidencia.Termina con | El patrón debe coincidir con el final de la cadena de texto. | Agrega $ al final de la expresión regular. |
Opciones de coincidencia.Ignorar mayúsculas y minúsculas | 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. |
Opciones de coincidencia.Multilinea | 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
Es coincidente ( Texto, Patrón [, Opciones ] )
- Texto - Requerido. La cadena de texto que se va a probar.
- Patrón - 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. Patrón debe ser una fórmula constante sin variables, fuentes de datos ni otras referencias dinámicas que cambien a medida que se ejecuta la aplicación.
- Opciones - Opcional. Una combinación de cadenas de texto de valores de enumeración MatchOptions. De forma predeterminada, se usa MatchOptions.Complete.
Fósforo ( Texto, Patrón [, Opciones ] )
- Texto - Requerido. La cadena de texto que debe coincidir.
- Patrón - 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. Patrón debe ser una fórmula constante sin variables, fuentes de datos ni otras referencias dinámicas que cambien a medida que se ejecuta la aplicación.
- Opciones - Opcional. Una combinación de cadenas de texto de valores de enumeración MatchOptions. De forma predeterminada, se usa MatchOptions.Contains.
Coincidir con todo ( Texto, Patrón [, Opciones ] )
- Texto - Requerido. La cadena de texto que debe coincidir.
- Patrón - 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. Patrón debe ser una fórmula constante sin variables, fuentes de datos ni otras referencias dinámicas que cambien a medida que se ejecuta la aplicación.
- Opciones - 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". | verdadero |
IsMatch( TextInput1.Text, "Good bye" ) |
Comprueba si la entrada del usuario coincide exactamente con la cadena "Good bye". | FALSO |
IsMatch( TextInput1.Text, "hello", Contains ) |
Comprueba si la entrada del usuario contiene la palabra "hello" (con distinción de mayúsculas y minúsculas). | FALSO |
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). | verdadero |
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. | verdadero |
IsMatch( "joan@contoso.com", Email ) |
Busca la coincidencia con una dirección de correo electrónico. | verdadero |
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. | verdadero |
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. | FALSO |
Expresiones regulares
Fórmula | Descripción | Resultado |
---|---|---|
IsMatch( "986", "\d+" ) |
Busca la coincidencia con un número entero mayor que cero. | verdadero |
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. | verdadero |
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. | verdadero |
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. | verdadero |
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. | FALSO |
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. | FALSO |
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. | blanco |
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( 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( 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). | |
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:
En una pantalla vacía, inserte un control Gallery vertical en blanco.
Establezca la propiedad Items de la galería en MatchAll( pangram, "\w+" ) o MatchAll( pangram, MultipleLetters ).
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.
Agregue un control Label a la plantilla de la galería.
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.