3 Stimmen

Mehrere reguläre Ausdrücke in PHP

Gibt es eine bessere Möglichkeit, mehrere reguläre Ausdrücke in PHP (oder allgemein) auszuführen?

Ich habe den Code unten, um nicht alphanumerische Zeichen mit Bindestrichen zu ersetzen, sobald die Ersetzung geschehen ist, möchte ich die Instanzen von mehreren Bindestrichen zu entfernen.

$slug = preg_replace('/[^A-Za-z0-9]/i', '-', $slug);
$slug = preg_replace('/\-{2,}/i', '-', $slug);

Gibt es einen ordentlicheren Weg, dies zu tun? dh, Einrichtung der Regex-Muster, um ein Muster und dann die andere zu ersetzen?

(Ich bin wie ein Kind mit einer Gabel in einer Steckdose, wenn es um Regex geht)

4voto

mu is too short Punkte 411765

Sie können die zweite preg_replace indem Sie im ersten Satz sagen, was Sie wirklich meinen:

$slug = preg_replace('/[^a-z0-9]+/i', '-', $slug);

Was Sie wirklich meinen, ist "alle Folgen von einem oder mehreren nicht alphanumerischen Zeichen durch einen einzelnen Bindestrich ersetzen", und das ist es, was /[^a-z0-9]+/i tut. Außerdem müssen Sie die Groß- und Kleinbuchstaben nicht einbeziehen, wenn Sie eine Regex ohne Berücksichtigung der Groß- und Kleinschreibung angeben, also habe ich das herausgenommen.

2voto

eykanal Punkte 25058

Nein. Was Sie haben, ist der richtige Weg, um mit diesem Problem umzugehen.

Betrachten Sie es aus diesem Blickwinkel: Reguläre Ausdrücke sind dazu gedacht, ein Muster zu finden (ein einzeln Muster) und irgendwie damit umgehen. Wenn Sie versuchen, mit mehr als einem Muster gleichzeitig umzugehen, bereiten Sie sich nur selbst Kopfschmerzen. Es ist für alle Beteiligten am besten so, wie es ist.

0voto

anubhava Punkte 713155

Si $slug bereits nicht mehrere Bindestriche enthält, können Sie den zweiten preg_replace-Aufruf vermeiden, indem Sie den ersten preg_replace-Aufruf wie folgt verwenden:

$slug = preg_replace('/[^a-z0-9]+-?/i', '-', $slug);

Der obige Code findet nicht-alphanumerische Zeichen wahlweise gefolgt von durch einen Bindestrich und ersetzen den übereinstimmenden Text durch einen einzelnen Bindestrich - . daher ist ein 2. preg_replace-Aufruf nicht erforderlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X