Optimieren der String-Platzhaltersubstitution mit RegEx
Die Funktion dynStr() zielt darauf ab, nach Platzhaltervariablen in einem bestimmten String, gekennzeichnet durch, zu suchen und diese zu ersetzen geschweifte Klammern. Obwohl es korrekt funktioniert, können seine Effizienz und Einfachheit verbessert werden.
Ein Hauptproblem bei dynStr() liegt in seiner Doppelarray-Struktur für $matches. Die Verwendung von zwei foreach-Schleifen für den Zugriff auf die gewünschten Daten ist ineffizient. Erwägen Sie, den regulären Ausdruck zu vereinfachen, um die Platzhaltervariable direkt zu extrahieren, ohne dass eine weitere Verarbeitung erforderlich ist:
preg_match_all('/{\w+}/', $str, $matches);
Als nächstes kann die Schleife zum Ersetzen der Platzhaltervariablen optimiert werden. Der aktuelle Ansatz verwendet mehrere String-Manipulationsoperationen und Array-Suchen, was ihn unnötig komplex macht:
foreach($match_group as $match) { // ... $str = ... }
Eine einfachere und prägnantere Alternative besteht darin, einen einzelnen Funktionsaufruf zu verwenden und den Platzhalter direkt zu ersetzen:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
Die Funktion strtr() führt mehrere Ersetzungen effizient durch, indem sie eine Zuordnung zwischen den Platzhaltervariablen und ihren entsprechenden Werten in den $vars definiert Array.
Darüber hinaus kann die Funktion unabhängig von der Groß-/Kleinschreibung gemacht werden, indem sowohl die Platzhaltervariablen als auch die Array-Schlüssel in Kleinbuchstaben konvertiert werden, sodass keine zusätzliche Verarbeitung erforderlich ist:
$allowed = array_keys(array_change_key_case($vars, CASE_LOWER)); ... $str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
Integration dieser Optimierungen führt zu einer effizienteren und optimierten dynStr()-Funktion:
function dynStr($str,$vars) { preg_match_all('/{\w+}/', $str, $matches); foreach($matches[0] as $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } return $str; }
Das obige ist der detaillierte Inhalt vonWie kann ich die Ersetzung von Zeichenfolgenplatzhaltern mithilfe regulärer Ausdrücke optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!