Suche…


Einführung

Wenn Sie mehr als einen einfachen String-Ersatz mit normalen regulären Ausdrücken wünschen, stoßen Sie sicherlich auf Schwierigkeiten und stoßen an die Wand, wenn Sie die Grenzen der regulären Ausdrücke erkennen, die Coldfusion bietet. Es gibt keine preg_replace_callback Funktion wie preg_replace_callback von php.

Parameter

Parameter Einzelheiten
re Der reguläre Ausdruck
str Die Zeichenfolge, die angewendet werden soll, der Regex
callback Die Funktion, an der die erfasste Gruppe abgelegt wird, wird übergeben, wenn eine Übereinstimmung gefunden wurde. Dort können die Spiele bearbeitet werden

Bemerkungen

Da Coldfusion selbst nicht das bietet, was wir wollen, greifen wir auf die Vielfalt von Java zurück, die - wie wir alle wissen - über Coldfusion hinausgeht. Java bietet uns java.util.regex.Pattern .

Also, was machen wir eigentlich:

  1. Rufen Sie die Compile Methode aus dem Pattern Class-Objekt auf und übergeben Sie das Regex-Muster (das das Regex-Muster wahrscheinlich für eine spätere Verwendung hinterlegt).
  2. Rufen Sie die Matcher Methode auf, was die Compile Methode zurückgegeben hat, und übergeben Sie die Zeichenfolge, an der das Muster ausgeführt werden soll.
  3. Testen Sie, ob der Abgleich erfolgreich war, indem Sie die find Methode aufrufen, die von der Matcher Methode zurückgegeben wurde.

Wenn matcher.find() true zurückgibt, könnte man sagen "Das ist es", aber es gibt eine Kleinigkeit, die wir berücksichtigen müssen: Das Pattern-Objekt von Java speichert die Gruppen und gibt uns Zugriff über eine andere Funktion, was nicht immer der beste Weg ist Weiterverarbeitung und nicht so konsistent wie andere Programmiersprachen mit diesem Fall umgehen. Deshalb matcher.group() wir matcher.group() , um ein Array mit den erfassten Gruppen an die Callback-Funktion zu übergeben. Und jetzt können wir sagen: "Das ist es!"

Benutzerdefinierte REReplaceCallback-Funktion

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);
    }
}

Verwendung der REReplaceCallback-Funktion

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow