2017-03-20 3 views
0

Ich bin neu in PHP.Regex Duplikat Spintax

Ich möchte einen Artikel Spinner mit PHP machen.

Vor dem String-Prozess mit spintax Funktion, ich möchte etwas Text mit seinen Synonymen ersetzen.

z.B:

$text = "Mother fry a turkey in the cooking room accompanied by a father who makes drinks and mother really happy."; 

Ergebnis:

$newstring = "{mother|mama} {fry|cook} {a turkey|the chicken} in the {the cooking room|kitchen} {accompanied by|with} {father|papa} who {makes|prepare} {coffee|drinks} and {mother|mama} really {happy|fun}."; 

Ich bin nicht MySQL-Datenbank verwenden, aber nur TXT-Datei verwenden und nur mit fopen für die Synonyme bekommen.

aber das Ergebnis war sehr schlecht,

Beispiel:

$newstring = "{mother|mama} {fry|cook} {a turkey|the chicken} in the {the cooking room|kitchen} {accompanied by|with} {father|papa} who {makes|prepare} {coffee|drinks} and {{mother|mama}|mama} really {happy|fun}."; 

Ich benutze RegexMuster wie folgen aus:

$text = preg_replace("/\b$search\b/sui", $replace, $text); 

Was RegexMuster soll ich so doppelten Ersatz zu vermeiden, verwenden ?

Jeder kann mir helfen?

Sorry für mein schlechtes Englisch.

Vielen Dank.

+0

Schlechte Englisch ist verzeihlich, schlechte Formatierung ist nicht! Bitte bearbeiten Sie Ihre Frage, um eine korrekte Formatierung zu erhalten. Wenn Sie nicht sicher sind, wie es geht, gibt es einen Link zur Bearbeitung der Hilfe. – miken32

+0

Sorry ich kann nicht verstehen, was Formatierung Sie meinen ... –

+0

Google Übersetzer ist Ihr Freund, aber einfügen "Formatierung" nicht Formatierung :-). Wenn Sie auf "Bearbeiten" (unter den Tags der Frage) klicken, können Sie Ihren Text mit dem Editor "formatieren". Zum Beispiel können Sie die Code-Teile mit der Code-Markup-Schaltfläche des Editors umhüllen und so weiter ... –

Antwort

0

Lets aus den alten Denkmuster erhalten:

$text = "Father roasts mother in the cooking room accompanied by a turkey who makes drinks and the turkey is really happy."; 

Sie benötigen ein assoziatives Array und einen Wechsel zu bauen jedes Wort in der Liste übereinstimmen und preg_replace_callback mit allen von ihnen in einem einzigen Durchgang ersetzen:

Der Modifikator u bewirkt, dass die Regex-Engine die Zeichenfolge als eine in UTF-8 codierte Unicode-Zeichenfolge liest (nützlich, wenn Ihre Zeichenfolge Zeichen aus dem ASCII-Bereich verwendet).

demo

beachte, dass die Anordnung der Wörter in der umgekehrten Reihenfolge das Sortieren wichtig ist, da die Regex Motors der erste Zweig zurückgibt, die in einer Wechselfolge erfolgreich ist.