Das ist was ich habe
%Vor%Das ist was ich brauche
Ergebnisse in Spannen und Leerstellen können ebenfalls neue Zeilen sein.
%Vor%Sie könnten sich fragen, wofür ich das möglicherweise brauche. Ich möchte etwas erschaffen, wo immer ein Charakter durch einen Block repräsentiert wird. Wird unter Windows XP ein wenig wie Defrag aussehen.
Frage
<span></span>
. Was habe ich bisher gemacht?
Ich habe Artikel über die Regexp gefunden, aber nicht jedes Zeichen ersetzt (Auszug Leerzeichen und Newline)
%Vor%Es gibt keine Notwendigkeit für Hacky Regex-Lösungen. Eine einfache for-Schleife mit einem Zustandsautomaten sollte gut funktionieren:
%Vor% Diese Schleife behält nur den Überblick, wenn wir ein Tag oder ein einzelnes Zeichen lesen. Wenn es sich um ein Tag (oder Leerzeichen) handelt, hängen Sie das tatsächliche Zeichen an, andernfalls fügen Sie <span></span>
an.
Ergebnisse in:
%Vor% Sie können preg_replace_callback()
Dies ist nur die Ersatzzeichenfolge abhängig von der Übereinstimmung zu berechnen. Wenn die Länge der Übereinstimmung 1 ist (es wurde kein Leerzeichen gefunden), ersetzen Sie sie durch die "span" -Tags, andernfalls wurde ein span-Tag gefunden.
ist es erforderlich, nur einen regulären Ausdruck zu verwenden?
wenn nicht - Sie könnten Teilstrings ersetzen, die Sie mit einem eindeutigen Zeichen sichern müssen, führen Sie das Ersetzen durch regexp aus, setzen Sie anstelle dieses eindeutigen Zeichens Teilstrings.
Einfach so:
%Vor%Siehe Live-Demo Ссылка
UPD:
Vielleicht sollte es nur als Hinweis betrachtet werden. Mein Vorschlag war, Teilstrings zu speichern, was gespeichert werden musste, alles zu ersetzen, was Sie brauchen, gespeicherte Werte wieder in Strings zu speichern.
%Vor%Arbeitsdemo gibt es Ссылка
Also hier ist, was ich mit preg_replace_callback () : Ausgabe:
Dies ist KEINE Hacky-Regex-Methode. Dies ist eine solide, prägnante Lösung mit einer Zeile und einer Funktion, die verhindert, dass eine Batterie von Bedingungen für jedes Zeichen in einer Zeichenfolge durchlaufen werden muss, behält Tags bei und sorgt für Multibyte-Zeichen.
Die Lösung von alexn behält die sichtbare Zeichenlänge von åäö
nicht bei. Seine Lösung wird 6 öffnende und schließende Span-Tags auf dem Bildschirm ausgeben anstatt nur 3. Dies ist der Fall, weil mb_
-Funktionen nicht verwendet werden. Achten Sie bei diesem Thema auf keine der Methoden auf dieser Seite, die mb_
vorfixierte Zeichenfolgenfunktionen verwenden.
Meine vorgeschlagene Lösung nutzt die (*SKIP)(*FAIL)
-Technik, um alle gefundenen Tags zu ignorieren / zu disqualifizieren und dann nur Zeichen mit Leerzeichen in der Zeichenfolge zu finden.
Code: ( Demo )
%Vor%Ausgabe: (scrollen Sie nach rechts, um die Auswirkung des Unicode-Flags auf das Muster zu sehen)
%Vor%Tags und Links string php regex replace preg-replace