Wenn Sie die .NET-Regex-Engine zu Ihrer Verfügung hätten, könnten Sie dies in einem einzigen Regex tun, indem Sie nach (?:.(?=\[email protected])|(?<[email protected]\S+).)
suchen und alle Übereinstimmungen durch dot
ersetzen.
In PHP, würden Sie es in zwei Schritten zu tun haben/iterativ:
Suche nach \.(?=\[email protected])
und ersetzen mit dot
:
$subject = preg_replace('/\.(?=\[email protected])/', ' dot ', $subject);
Dadurch werden alle Punkte, die in E-Mail-Adressen ersetzen, bevor auftreten die @
. Dann nach (@\S+)\.
suchen und durch \1 dot
ersetzen; Wiederholen Sie dies, bis keine weiteren Übereinstimmungen gefunden werden.
So etwas wie
while (preg_match('/(@\S+)\./', $subject)) {
$subject = preg_replace('/(@\S+)\./', '\1 dot ', $subject);
}
Dies wird innerhalb einer E-Mail-Adresse nach den @
, einen Punkt passen, aber da PHP Regex-Engine, ich brauche nicht unendlich Lookbehind unterstützt die Regex auf den String so oft erneut anwenden als die maximale Anzahl von Punkten nach dem @
. In der Zeichenkette @foo.bar.com
wird zum Beispiel zuerst @foo.bar.
angezeigt und durch @foo.bar dot
ersetzt. Dann wird im nächsten Lauf @foo.
durch @foo dot
ersetzt.