Les expressions régulières

Étiquetté : ,

  • Les expressions régulières

    Posté par ypicot sur 1 octobre 2023 à 20h31

    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

    ypicot a répondu Il y a 10 mois, 1 semaine 1 Membre · 2 Réponses
  • 2 Réponses
  • R3dKap

    Membre
    2 octobre 2023 à 8h50

    Aaaaah… Quand je serais en galère sur mes regex je saurais vers qui me tourner maintenant… Héhéhé ! 😂

    Merci pour l’article ypicot 👍

    Perso, j’utilise ce site pour les écrire et les tester : https://regex101.com/. Mais je suppose qu’il en existe des tas… 😉

    CommentID=lgzXMYCN1CgA3UU, PostID=JQwAjzxTqfzURiO

    • ypicot

      Membre
      2 octobre 2023 à 15h56

      Désolé, je n’aide pas les personnes qui sont avant moi dans l’ordre alphabétique… 😈

      Effectivement, il existe plusieurs sites (http://regextester.com, http://regexr.com, …), sans oublier la foultitude d’outils qu’on peut trouver dans les éditeurs de texte ou sur github…

      Un des avantages de https://regex101.com est qu’il permet de choisir -dans une certaine mesure- son moteur de regex. D’après ce que j’ai compris, celui qui se rapproche le plus de PowerApps est celui de Javascript, mais c’est à vérifier.

      SubCommentID=a4aIOSDxwicXkx0, CommentID=lgzXMYCN1CgA3UU, PostID=JQwAjzxTqfzURiO

Connectez-vous pour répondre.