Ich versuche, eine Funktion zu schreiben, die aufeinanderfolgende doppelte Wörter innerhalb einer Zeichenfolge entfernt. Es ist wichtig, dass einer der Übereinstimmungen, die durch den regulären Ausdruck gefunden werden, erhalten bleibt. Mit anderen Worten ...Entfernen von aufeinander folgenden doppelten Wörtern in einer Zeichenfolge
Ein sehr sehr sehr schmutziger Hund
sollte geworden ...
Ein sehr schmutziger Hund
Ich habe einen regulären Ausdruck das scheint gut zu funktionieren (based on this post)
(\b\S+\b)(($|\s+)\1)+
Allerdings bin ich nicht sicher, wie preg_replace zu verwenden ist (oder ob es eine bessere Funktion gibt), dies zu implementieren. Im Moment habe ich es alle übereinstimmenden wiederholten Wörter löschen, ohne eine Kopie des Wortes intakt zu lassen. Kann ich eine Variable oder eine spezielle Anweisung analysieren, um eine Übereinstimmung aufrechtzuerhalten?
Ich habe dies zur Zeit ...
$string=preg_replace('/(\b\S+\b)(($|\s+)\1)+/', '', $string);
Beachten Sie, dass es keinen Sinn macht, '$' im Wechsel zu verwenden, da '$ \ 1' niemals übereinstimmt (Sie verwenden nicht einmal den Multiline-Modifikator.) –