Les expressions régulières
-
Les expressions régulières
Bonjour
Voici une petite présentation très partielle (et partiale) des expressions régulières (“regular expression”, ou “regex” en grand-breton) dans Power Apps. Les puristes me pardonneront certains raccourcis, voire imprécisions.
Une regex est composée de trois types d’élément :
-
que cherche-t-on
-
combien de fois le cherche-t-on
-
les options
Premier exemple
Si nous cherchons à reconnaître un code produit composé de deux lettres majuscules, de trois chiffres et se terminant par la lettre P, la regex peut être :
[A-Z]{2}[0-9]{3}P
Cette chaîne est le *motif* (pattern) que nous cherchons à reconnaître dans un texte cible. Il s’agit d’un texte, donc la formule PowerApps serait :
Match(locVariable; “[A-Z]{2}[0-9]{3}P”)
Que cherche-t-on ?Les caractères
Il suffit d’indiquer le caractère recherché. Dans l’exemple précédent, nous recherchions la lettre P situé à la fin du motif.
ABC trouvera… ABC (on est à la limite du scoop, là, non ?)
Les ensembles
Il est possible de chercher des lettres, des chiffres, des caractères particuliers, …
Dans l’exemple précédent, [A-Z] est un ensemble qui permettait de reconnaître n’importe quelle lettre de l’alphabet, et [0-9] n’importe quel chiffre.
Si nous voulions restreindre les lettres possibles au 5 premières lettres de l’alphabet, nous aurions écrit l’ensemble [A-E]. Notez le tiret qui signifie “de A jusqu’à E”.
Si nous voulions reconnaître uniquement les voyelles, nous aurions écrit [AEIOU] (une énumération sans tiret).
Les raccourcis
Certains ensembles sont récurrents : pouvoir reconnaître un chiffre ou un caractère “normal” est un besoin courant. Nous pouvons noter quelques raccourcis :
-
\d est l’équivalent de [0-9]
-
\w est l’équivalent de [a-zA-Z0-9_] (notez l’absence d’espace)
-
\s est l’équivalent de [ ] (un espace)
-
. (un point) est l’équivalent de n’importe quel caractère
Les raccourcis Power Apps
-
Match.Digit est l’équivalent de [0-9]
-
Match.Space est l’équivalent de [ ]
Attention, il ne faut pas les mettre entre guillemets.
Match(locVariable; Match.Digit) est donc l’équivalent de Match(locVariable; “[0-9]”)
Combien de fois le cherche-t-on ?
(Par simplification, je vais appeler “ensemble” ce qui peut être un ensemble ou un caractère)
Par défaut, le motif cherche un ensemble une seule fois. Ainsi, nous aurions pu écrire l’exemple du début :
[A-Z][A-Z][0-9][0-9][0-9]P
Nous avons bien deux lettres, trois chiffres et la lettre P pour finir.
Le nombre entre accolades à la suite d’un ensemble permet de définir le nombre de fois où cet ensemble est répété.
On arrive ainsi à notre motif initial : [A-Z]{2}[0-9]{3}P
Nous aurions également pu écrire : [A-Z]{2}[0-9]{3}P{1}Mais comment faire si un caractère est optionnel, ou au contraire peut être répété un grand nombre de fois ?
C’est là ou trois quantificateurs interviennent :
-
? : l’ensemble peut apparaître 0 ou 1 fois
-
+ : l’ensemble peut apparaître 1 ou plusieurs fois
-
* : l’ensemble peut apparaître 0, 1 ou plusieurs fois
Par exemple :
-
[A-Z][0-9]?W reconnaît “B5W”, “BW” mais pas “5W” ni “B55W”
-
[A-Z][0-9]+W reconnaît “B5W”, “B56457W” mais pas “BW”
-
[A-Z][0-9]*W reconnaît “B5W”, “B56457W” et “BW”
-
B.*W reconnait tout ce qui commence par B et se termine par W : “BW”, “B_A9W”, …
Les options
Je retiendrai deux options :
MatchOptions.IgnoreCase : rend la recherche insensible à la case.
Match(locVariable; “[A-Z]{2}”) reconnaitra “BC” mais pas “bc”
Match(locVariable; “[A-Z]{2}”; MatchOptions.IgnoreCase) reconnaîtra “BC” mais aussi “bc”
MatchOptions.Complete : le motif doit correspondre à l’ensemble du texte cible, du début à la fin.
Match(locVariable; “[A-Z]{2}”) reconnaîtra “BC” mais aussi “ABCD”
Match(locVariable; “[A-Z]{2}”; MatchOptions.Complete) reconnaîtra “BC” mais pas “ABCD”
Cette petite présentation a pour but de démystifier les regex, et faciliter la lecture / compréhension de la page de learn.microsoft.com sur le sujet. Nous avons à peine gratté la surface de la bête : à titre indicatif, il existe un bouquin de plus de 500 pages consacré exclusivement aux regex…
PostID=JQwAjzxTqfzURiO
-
Connectez-vous pour répondre.