coldfusion
Mit RegExp arbeiten Ersetzen Sie Callbacks
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:
- Rufen Sie die
CompileMethode aus demPatternClass-Objekt auf und übergeben Sie das Regex-Muster (das das Regex-Muster wahrscheinlich für eine spätere Verwendung hinterlegt). - Rufen Sie die
MatcherMethode auf, was dieCompileMethode zurückgegeben hat, und übergeben Sie die Zeichenfolge, an der das Muster ausgeführt werden soll. - Testen Sie, ob der Abgleich erfolgreich war, indem Sie die
findMethode aufrufen, die von derMatcherMethode 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
});