Ich habe diesen Regex erstellt
%Vor%das passt zu jedem Ссылка oder www .... aber ich weiß nicht, wie preg_replace funktionieren soll, ich habe es versucht
%Vor%aber es funktioniert nicht, das Ergebnis ist eine leere Zeichenfolge.
Sie müssen die Schrägstriche in der Regex umgehen, da Sie Schrägstriche als Trennzeichen verwenden. Sie können auch ein anderes Symbol als Trennzeichen verwenden.
%Vor%Wenn Sie die von den anderen Benutzern bereitgestellten Regex-Codes verwenden, achten Sie darauf, das Flag "i" hinzuzufügen, um die Groß- / Kleinschreibung zu aktivieren, damit es sowohl mit HTTP: // als auch mit http: // funktioniert. Verwenden Sie zum Beispiel den Chaos-Code:
%Vor%Zuallererst müssen Sie die Delimeter, wie in den anderen Antworten erklärt, fliehen - oder besser noch ersetzen.
%Vor% Zweitens, um die Regex weiter zu verbessern, wird die $n
Ersatzreferenzsyntax gegenüber \n
bevorzugt, wie in angegeben Handbuch .
Drittens verwenden Sie überflüssige Klammern, die die Dinge nur verlangsamen. Sie loswerden. Vergessen Sie nicht, auf
zu aktualisieren. Falls Sie sich wundern, sind dies nicht erfassende Klammern: (?: )
[^ ]+
.
Schließlich würde ich \S
durch die kürzere und genauere \s
ersetzen, was das Gegenteil von [^ ]+
ist. Beachten Sie, dass \S
keine Leerzeichen erlaubt, aber Zeilenumbrüche und Tabulatoren akzeptiert! %code% nicht.
Ihr Hauptproblem scheint zu sein, dass Sie alles in Klammern setzen, damit es nicht weiß, was "\ 1" ist. Außerdem müssen Sie dem "/" entkommen. Versuchen Sie es also:
preg_replace('/(www|http:\/\/[^ ]+)/', '<a href=""></a>', $str);
Edit: Es scheint tatsächlich, die Klammern waren kein Problem, ich habe es falsch gelesen. Die Flucht war immer noch ein Thema, auf das auch andere hingewiesen haben. Jede Lösung sollte funktionieren.
Wenn Sie /
als Mustertrennzeichen verwenden, funktioniert /
in Ihrem Muster nicht gut. Ich habe das gelöst, indem ich !
als Mustertrennzeichen verwendet habe, aber Sie könnten stattdessen Ihre Schrägstriche mit Backslashes umgehen.
Ich habe auch keinen Grund gesehen, warum du zwei Paren-Captures gemacht hast, also habe ich einen von ihnen entfernt.
Ein Teil des Problems in Ihrer Situation besteht darin, dass Sie mit deaktivierten Warnungen arbeiten. Wenn du error_reporting(E_ALL)
aktiviert hättest, hättest du die Nachrichten gesehen, die PHP in deinem Regex über dein Delimiterproblem zu generieren versucht.
Wenn mehrere URLs in einem String enthalten sind, der durch einen Zeilenumbruch anstelle eines Leerzeichens getrennt ist, müssen Sie das \ S
verwenden %Vor%Tags und Links php regex preg-replace