Fonctions IsMatch, Match et MatchAll

S’applique à : Applications canevas Applications pilotées par modèle Power Platform CLI

Teste une correspondance ou extrait des parties d’une chaîne de texte en fonction d’un modèle.

Description

La fonction IsMatch teste si une chaîne de texte correspond à un modèle qui peut comprendre des caractères ordinaires, des modèles prédéfinis ou une expression régulière. Les fonctions Match et MatchAll renvoient ce qui a été trouvé, y compris les sous-correspondances.

Utilisez la fonction IsMatch pour vérifier la saisie d’un utilisateur dans un contrôle Text input. Par exemple, vous pouvez vérifier si l’utilisateur a entré une adresse e-mail valide avant l’enregistrement du résultat dans votre source de données. Si l’entrée ne correspond pas à vos critères, ajoutez d’autres contrôles invitant l’utilisateur à corriger l’entrée.

Utilisation Match pour extraire la première chaîne de texte qui correspond à un modèle et MatchAll pour extraire toutes les chaînes de texte qui correspondent. Vous pouvez également extraire des sous-correspondances pour analyser des chaînes complexes.

Match renvoie un enregistrement d’informations pour la première correspondance trouvée, et MatchAll renvoie une table d’enregistrements pour chaque correspondance trouvée. Le ou les enregistrements contiennent :

Column Type Description
sous-correspondance ou sous-correspondances nommées Text Chaque sous-correspondance nommée aura sa propre colonne. Créez une sous-correspondance nommée à l’aide de (?<nom>...) dans l’expression régulière. Si une sous-correspondance nommée a le même nom que l’une des colonnes prédéfinies (ci-dessous), la sous-correspondance est prioritaire et un avertissement est généré. Pour éviter cet avertissement, renommez la sous-correspondance.
FullMatch Texte Toute la chaîne de texte qui a été mise en correspondance.
StartMatch Nombre La position de départ de la correspondance dans la chaîne de texte d’entrée. Le premier caractère de la chaîne renvoie 1.
SubMatches Tableau de texte à une colonne (colonne Value) Tableau des sous-correspondances nommées et non nommées dans l’ordre dans lequel elles apparaissent dans l’expression régulière. Généralement, les sous-correspondances nommées sont plus faciles à utiliser et sont encouragées. Utilisez la fonction ForAll ou les fonctions Last( FirstN( ... ) ) avec une sous-correspondance individuelle. Si aucune sous-correspondance n’est définie dans l’expression régulière, cette table sera présente mais vide.

Ces fonctions prennent en charge MatchOptions. Par défaut :

  • Ces fonctions effectuent une correspondance sensible à la casse. Utilisez MatchOptions.IgnoreCase pour effectuer des correspondances insensibles à la casse.
  • IsMatch correspond à la chaîne de texte entière (MatchOption Complete), tandis que Match et MatchAll recherchent une correspondance n’importe où dans la chaîne de texte (MatchOption Contains). Utilisez Complete, Contains, BeginsWith, ou EndsWith selon votre scénario.

La fonction IsMatch retourne true si la chaîne de texte correspond au modèle et false si ce n’est pas le cas. Match retourne blank si aucune correspondance n’est trouvée qui peut être testée avec la fonction IsBlank. MatchAll retourne une table vide si aucune correspondance n’est trouvée qui peut être testée avec la fonction IsEmpty.

Si vous utilisez MatchAll pour fractionner une chaîne de texte, pensez à utiliser la fonction Split, qui est plus simple à utiliser et plus rapide.

Modèles

L’utilisation de ces fonctions repose principalement sur la description du modèle à mettre en correspondance. Vous devez décrire le modèle dans une chaîne de texte en combinant les éléments suivants :

  • Caractères ordinaires, tels que « abc » ou « 123 ».
  • Modèles prédéfinis, comme Letter, MultipleDigits ou Email. (L’enum Match définit ces modèles.)
  • Codes d’expressions régulières, comme "\d+\s+\d+" ou "[a-z]+".

Combinez ces éléments à l’aide de l’opérateur de concaténation de chaîne &. Par exemple, le "abc" & Digit & "\s+" est un modèle valide qui correspond aux caractères « a », « b » et « c », suivis d’un chiffre compris entre 0 et 9, puis d’au moins un espace blanc.

Caractères ordinaires

Le modèle le plus simple consiste à définir une séquence de caractères ordinaires avec correspondance exacte.

Par exemple, lorsqu’il est utilisé avec la fonction IsMatch, la chaîne "Hello" correspond au modèle "Hello" exactement. Ni plus ni moins. La chaîne « hello ! » ne correspond pas au modèle, car elle se termine par un point d’exclamation. De plus, la casse de la lettre « h » est incorrecte. (Voir MatchOptions pour savoir comment modifier ce comportement.)

Dans le langage du modèle, certains caractères sont réservés à des fins spécifiques. Pour utiliser ces caractères, faites-les précéder d’une barre oblique inverse (\) pour indiquer qu’ils doivent doit être pris en compte de façon littérale, ou utilisez l’un des modèles décrits plus loin dans cette rubrique. Le tableau suivant répertorie les caractères spéciaux :

Caractère spécial Description
. point
? point d’interrogation
* astérisque
+ et
( ) parenthèses
[ ] crochets
{ } accolades
^ caret
$ signe dollar
| barre verticale
\ barre oblique inverse

Par exemple, vous pouvez faire correspondre « Hello ?» en utilisant le modèle « Hello\? » avec une barre oblique inverse avant le point d’interrogation.

Modèles prédéfinis

Les modèles prédéfinis offrent un moyen simple de faire correspondre un caractère d’un jeu de caractères ou une séquence de caractères. Utilisez l’opérateur de concaténation de chaîne & pour combiner vos propres chaînes de texte avec les éléments de l’enum Match :

Enum Match Description Expression régulière
Any Correspond à n’importe quel caractère. .
Comma Correspond à une virgule. ,
Digit Correspond à un chiffre unique (compris entre « 0 » et « 9 »). \d
Adresse e-mail Correspond à une adresse e-mail contenant le symbole « @ » et un nom de domaine avec un point (« . ») .+\@.+\\.[^\\.]{2,}
Hyphen Correspond à un trait d’union. \-
LeftParen Correspond à une parenthèse ouvrante « ( ». \(
Letter Correspond à une lettre. \p{L}
MultipleDigits Correspond à un ou plusieurs chiffres. \d+
MultipleLetters Correspond à une ou plusieurs lettres. \p{L}+
MultipleNonSpaces Correspond à un ou plusieurs caractères qui n’ajoutent pas d’espace blanc (pas d’espace, de tabulation ou de saut de ligne). \S+
MultipleSpaces Correspond à un ou plusieurs caractères qui ajoutent un espace blanc (espace, tabulation ou saut de ligne). \s+
NonSpace Correspond à un caractère unique qui n’ajoute pas d’espace blanc. \S
OptionalDigits Correspond à zéro, un ou plusieurs chiffres. \d*
OptionalLetters Correspond à zéro, une ou plusieurs lettres. \p{L}*
OptionalNonSpaces Correspond à zéro, un ou plusieurs caractères qui n’ajoutent pas d’espace blanc. \S*
OptionalSpaces Correspond à zéro, un ou plusieurs caractères qui ajoutent un espace blanc. \s*
Period Correspond à un point («. »). \.
RightParen Correspond à une parenthèse fermante « ) ». \)
Space Correspond à un caractère qui ajoute un espace blanc. \s
Tab Correspond à un caractère de tabulation. \t

Par exemple, le modèle "A" & MultipleDigits correspond à la lettre « A » suivie d’un ou plusieurs chiffres.

Expressions régulières

Le modèle utilisé par ces fonctions est un expression régulière. Les caractères ordinaires et les modèles prédéfinis qui sont décrits plus tôt dans cette rubrique simplifient la création d’expressions régulières.

Les expressions régulières sont très performantes, disponibles dans de nombreux langages de programmation et utilisées à de nombreuses fins. Ils peuvent aussi souvent ressembler à une séquence aléatoire de signes de ponctuation. Cet article ne décrit pas tous les aspects des expressions régulières, mais vous trouverez sur Internet une mine d’informations, de didacticiels et d’outils.

Il existe différents dialectes d’expressions régulières. Power Apps utilise une variante du dialecte JavaScript. Voir syntaxe d’expression régulière pour une introduction à la syntaxe. Les sous-correspondances nommées (parfois appelées groupes de capture nommés) sont prises en charge :

  • Sous-correspondances nommées : (?<nom>...)
  • Références antérieures nommées : \k<nom>

Dans la table enum Match plus tôt dans ce sujet, chaque énumération apparaît dans la même ligne que son expression régulière correspondante.

Options de correspondance

Vous pouvez modifier le comportement de ces fonctions en spécifiant une ou plusieurs options, que vous pouvez combiner à l’aide de l’opérateur de concaténation de chaîne (&).

Enum MatchOptions Description Impact sur une expression régulière
MatchOptions.BeginsWith Le modèle doit correspondre au début du texte. Ajoute un caractère ^ au début de l’expression régulière.
MatchOptions.Complete Valeur par défaut pour IsMatch. Le modèle doit correspondre à l’intégralité de la chaîne de texte, du début à la fin. Ajoute un caractère ^ au début de l’expression régulière et un caractère $ à la fin.
MatchOptions.Contains Par défaut pour Match et MatchAll. Le modèle doit apparaître dans le texte, mais ne doit pas nécessairement se trouver au début ou à la fin. L’expression régulière n’est pas modifiée.
MatchOptions.EndsWith Le modèle doit correspondre à la fin de la chaîne de texte. Ajoute un caractère $ à la fin de l’expression régulière.
MatchOptions.IgnoreCase Traite les majuscules et les minuscules comme identiques. Par défaut, la casse est prise en compte pour la correspondance. L’expression régulière n’est pas modifiée. Cette option est l’équivalent du modificateur "i" standard pour les expressions régulières.
MatchOptions.Multiline La correspondance porte sur plusieurs lignes. L’expression régulière n’est pas modifiée. Cette option est l’équivalent du modificateur "m" standard pour les expressions régulières.

En utilisant MatchAll équivaut à utiliser le modificateur "g" standard pour les expressions régulières.

Syntaxe

IsMatch( Text, Pattern [, Options ] )

  • Text : obligatoire. La chaîne de texte à tester.
  • Pattern : obligatoire. Le modèle à tester, comme une chaîne de texte. Concaténez des modèles prédéfinis qui sont définis par l’enum Match, ou fournissez une expression régulière. Pattern doit être une formule constante sans variables, sources de données ou autres références dynamiques qui changent au cours de l’exécution de l’application.
  • Options : facultatif. Une combinaison de valeurs enum MatchOptions dans une chaîne de texte. Par défaut, MatchOptions.Complete est utilisé.

Match( Text, Pattern [, Options ] )

  • Text : obligatoire. La chaîne de texte à mettre en correspondance.
  • Pattern : obligatoire. Le modèle à mettre en correspondance, comme une chaîne de texte. Concaténez des modèles prédéfinis qui sont définis par l’enum Match, ou fournissez une expression régulière. Pattern doit être une formule constante sans variables, sources de données ou autres références dynamiques qui changent au cours de l’exécution de l’application.
  • Options : facultatif. Une combinaison de valeurs enum MatchOptions dans une chaîne de texte. Par défaut, MatchOptions.Contains est utilisé.

MatchAll( Text, Pattern [, Options ] )

  • Text : obligatoire. La chaîne de texte à mettre en correspondance.
  • Pattern : obligatoire. Le modèle à mettre en correspondance, comme une chaîne de texte. Concaténez des modèles prédéfinis qui sont définis par l’enum Match, ou fournissez une expression régulière. Pattern doit être une formule constante sans variables, sources de données ou autres références dynamiques qui changent au cours de l’exécution de l’application.
  • Options : facultatif. Une combinaison de valeurs enum MatchOptions dans une chaîne de texte. Par défaut, MatchOptions.Contains est utilisé.

Exemples IsMatch

Caractères ordinaires

Imaginez que votre application contienne un contrôle Text input nommé TextInput1. L’utilisateur entre dans ce contrôle des valeurs à stocker dans une base de données.

L’utilisateur tape Hello world dans TextInput1.

Formule Description Résultat
IsMatch( TextInput1.Text, "Hello world" ) Teste si l’entrée de l’utilisateur correspond exactement à la chaîne « Hello world ». true
IsMatch( TextInput1.Text, "Good bye" ) Teste si l’entrée de l’utilisateur correspond exactement à la chaîne « Good bye ». false
IsMatch( TextInput1.Text, "hello", Contains ) Teste si l’entrée de l’utilisateur contient le mot « hello » (la casse est prise en compte). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Teste si l’entrée de l’utilisateur contient le mot « hello » (la casse n’est pas prise en compte). true

Modèles prédéfinis

Formule Description Résultat
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Correspond à un numéro de sécurité sociale aux États-Unis true
IsMatch( "joan@contoso.com", Email ) Correspond à une adresse e-mail true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Correspond à une séquence de chiffres suivie d’un point, puis de zéro, un ou plusieurs chiffres. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Correspond à une séquence de chiffres suivie d’un point, puis de zéro, un ou plusieurs chiffres. Aucun point n’apparaît pas dans le texte à mettre en correspondance. Par conséquent, aucune correspondance avec ce modèle n’est trouvée. false

Expressions régulières

Formule Description Résultat
IsMatch( "986", "\d+" ) Correspond à un entier supérieur à zéro. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Correspond à un montant monétaire positif. Le cas échéant, l’entrée doit contenir deux décimales et non une seule. Par exemple, 3.00 est une valeur valide, mais 3.1 ne l’est pas. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Correspond à un montant monétaire positif ou négatif. Le cas échéant, l’entrée doit contenir deux décimales et non une seule. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Correspond à un numéro de sécurité sociale aux États-Unis. Valide le format, le type et la longueur du champ d’entrée fourni. La chaîne à mettre en correspondance doit contenir trois caractères numériques suivis d’un tiret, deux caractères numériques suivis d’un tiret, puis quatre caractères numériques. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Cette formule est similaire à celle de l’exemple précédent. Cependant, l’un des tirets est déplacé dans l’entrée. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Valide un mot de passe fort, qui doit contenir huit, neuf ou dix caractères, en plus d’au moins un chiffre et au moins un caractère alphabétique. La chaîne ne doit pas contenir de caractères spéciaux. false

Exemples Match et MatchAll

Formule Description Résultat
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Extrait uniquement la partie e-mail des informations de contact. {
email: "bob.jones@contoso.com",
FullMatch: « <bob.jones@contoso.com> »
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrait uniquement la partie e-mail des informations de contact. Aucune adresse légale n’est trouvée (il n’y a pas de signe @), donc la fonction retourne blank. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrait des parties de la langue, du script et de la région de balise de langue que la fonction Language renvoie. Ces résultats reflètent les États-Unis ; voir la documentation de fonction Language pour plus d’exemples. L’opérateur (?: regroupe les caractères sans créer une autre sous-correspondance. {
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)?" ) Extrait les heures, les minutes et les secondes d’une valeur de durée ISO 8601. Les nombres extraits sont toujours dans une chaîne de texte ; utilisez la fonction Value pour la convertir en nombre avant d’effectuer des opérations mathématiques sur celui-ci. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Examinons ce dernier exemple. Si vous souhaitez convertir cette chaîne en une valeur date/heure à l’aide de la fonction Time, vous devez passer les sous-correspondances nommées individuellement. Pour ce faire, vous pouvez utiliser la fonction With fonctionnant sur l’enregistrement que Match renvoie :

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

Pour ces exemples, ajoutez un contrôle Button, définissez sa propriété OnSelect sur cette formule, puis sélectionnez le bouton :

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formule Description Résultat
Match( pangram, "THE", IgnoreCase ) Trouvez toutes les correspondances de "THE" dans la chaîne de texte que la variable pangram contient. La chaîne contient deux correspondances, mais seule la première est renvoyée car vous utilisez Match et pas MatchAll. La colonne SubMatches est vide car aucune sous-correspondance n’a été définie. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Trouvez toutes les correspondances de "the" dans la chaîne de texte que la variable pangram contient. Le test est sensible à la casse, donc seule la deuxième instance de "the" est trouvée. La colonne SubMatches est vide car aucune sous-correspondance n’a été définie. MatchAll pour pangram.
MatchAll( pangram, "the", IgnoreCase ) Trouvez toutes les correspondances de "the" dans la chaîne de texte que la variable pangram contient. Dans ce cas, le test est insensible à la casse, donc les deux instances du mot sont trouvées. La colonne SubMatches est vide car aucune sous-correspondance n’a été définie. MatchAll avec IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Recherche tous les mots de trois lettres avec un "o" au milieu. Notez que "brown" est exclu car ce n’est pas un mot à trois lettres et, par conséquent, ne correspond pas à "\b" (limite de mot). MatchAll pour pangram avec b, wo, w et b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Correspond à tous les caractères entre "fox" et "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Pour voir les résultats de MatchAll dans une galerie :

  1. Dans un écran vide, insérez un contrôle Gallery vertical vide.

  2. Définissez la propriété Items de la galerie sur MatchAll( pangram, "\w+") ou MatchAll( pangram, MultipleLetters ).

    Galerie d’éléments.

  3. Sélectionnez "Add an item from the Insert tab" au milieu du contrôle Gallery pour sélectionner le modèle de la galerie.

  4. Ajoutez un contrôle Label au modèle de la galerie.

  5. Définissez la propriété Text sur ThisItem.FullMatch.

    La galerie est remplie de chaque mot de notre exemple de texte. Redimensionnez le modèle de la galerie et le contrôle Label afin de voir tous les mots sur un seul écran.

    Propriété Text.