Recherche…


Introduction

Si vous voulez plus qu'un simple remplacement de chaîne par des expressions régulières courantes, vous rencontrerez certainement des problèmes et vous heurterez au mur lorsque vous découvrirez les limites des fonctions regex utilisées par Coldfusion. Il n'y a pas de fonction intégrée telle que preg_replace_callback de php.

Paramètres

Paramètre Détails
re L'expression régulière
str La chaîne à appliquer à la regex
callback La fonction où le groupe capturé sera transmis si une correspondance a été trouvée. Là les allumettes peuvent être traitées

Remarques

Parce que Coldfusion lui-même ne propose pas ce que nous voulons, nous faisons appel à la variété de Java, qui est, comme nous le savons tous, au sommet de Coldfusion. Java nous propose java.util.regex.Pattern .

Alors voici ce que nous faisons réellement:

  1. Invoquez la méthode Compile partir de l'objet Classes de Pattern et transmettez-lui le modèle de regex (qui dépose probablement le modèle regex pour une utilisation ultérieure).
  2. Appelez la méthode Matcher sur ce que la méthode Compile renvoyé et passez la chaîne où le modèle doit être exécuté.
  3. Testez si la correspondance a été réussie en appelant la méthode find sur la méthode de retour de la méthode Matcher .

Si matcher.find() retourne true , on pourrait dire "Ca y est", mais il y a une petite chose à considérer: l'objet Pattern de Java stocke les groupes et nous donne accès via une autre fonction, ce qui n'est pas toujours le meilleur pour traitement ultérieur et pas si cohérent en ce qui concerne la façon dont les autres langages de programmation traitent ce cas. Par conséquent, nous effectuons une boucle sur matcher.group() afin de pouvoir passer un tableau contenant les groupes capturés à la fonction de rappel. Et maintenant nous pouvons dire: "Ça y est!"

Fonction REReplaceCallback définie par l'utilisateur

function REReplaceCallback(re,str,callback) {
    /*
        Thanks to Ben Nadel
        "Learning ColdFusion 8: REMatch() For Regular Expression Matching"
        from 2007-06-13
        https://www.bennadel.com/blog/769-learning-coldfusion-8-rematch-for-regular-expression-matching.htm
    */
    pattern = CreateObject("java","java.util.regex.Pattern").Compile(Arguments.re);
    matcher = pattern.Matcher(Arguments.str);
    if(matcher.find()) {
        groups = [];
        for(var i = 1; i lte matcher.groupCount(); i++) {
            ArrayAppend(groups,matcher.group(Val(i)));
        }
        return Arguments.callback(groups);
    }
    else {
        return Arguments.callback(false);
    }
}

Utilisation de la fonction REReplaceCallback

REReplaceCallback('YOUR REGEX GOES HERE','AND YOUR STRING HERE',function(groups) {
    //now you can access the 'groups' array containing all the captured groups
    return result; //return whatever you've processed inside
});


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow