[und] sind Sonderzeichen in einer Regex. Sie werden verwendet, um Charaktere eines Spiels aufzulisten. [a-z]
passt jeden Kleinbuchstaben zwischen "a" und "z". [03b]
entspricht einer "0", "3" oder "b". Um die Zeichen "[" und "]" abzugleichen, müssen Sie sie mit einem vorangestellten \
entschlüsseln.
Ihr Code sagt derzeit "ersetzen Sie ein beliebiges Zeichen von []().
mit einer leeren Zeichenfolge" (Reihenfolge aus der Reihenfolge, in der Sie sie aus Gründen der Klarheit eingegeben).
Greedy Spiel:
preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ]
Ein gieriges Spiel mehr [s und] s passen könnte. Dieser Ausdruck würde nehmen und in umwandeln.
Perl hat eine Syntax für eine nicht gierige Spiel (Sie wahrscheinlich nicht wollen, gierig sein):
preg_replace('/\[.*?\]/', '', $str);
Nicht gierig Matches versuchen, so wenig Zeichen wie möglich zu fangen. Mit demselben Beispiel: wird an example text here
.
nur bis zum ersten folgenden]:
preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ]
Dies ist deutlicher, aber schwieriger zu lesen. Mit demselben Beispieltext erhalten Sie die Ausgabe des nicht-gierigen Ausdrucks.
Beachten Sie, dass keiner von diesen explizit mit Leerzeichen behandelt. Die Leerzeichen auf beiden Seiten von [und] bleiben erhalten.
Beachten Sie auch, dass alle diese für fehlerhafte Eingabe fehlschlagen können. Mehrere [s und] s ohne Übereinstimmungen können zu einem überraschenden Ergebnis führen.
Vielen Dank für die Erklärung! –
Hmm, die missgebildete Eingabe ist etwas, in das ich hineinlaufen könnte. Ist es möglich, mit der Instanz umzugehen, die kein Matching hat?] –
Ich müsste wissen, wie Sie es handhaben wollen. Was würden Sie mit falschem Input erwarten? –