Frage

Ich versuche, jedes Auftreten eines Wortes mit der Zeichenfolge VVV mit 3 Buchstaben oder weniger das gleiche Wort zu konvertieren, um es angebracht ist.
Beispiel: -> forVVV
Ich benutze keine lateinischen Zeichen (UTF-8), daher das MB.
Was ich habe, ist:

$pattern='\b[.{1,6}]\b';
$text=mb_ereg_replace($pattern,'\0VVV',$text,'me');

Was bin ich?

Hier ist eine Fallstudie ist, sieht es fängt nichts:

$text="א אב אבי אביהו מדינה שול של";
$pattern='/\b.{1,6}\b/um';
$text=preg_replace($pattern,'hhh',$text);
echo $text;
War es hilfreich?

Lösung

Sie sind Muster ist nicht den Nachweis oder die Dinge richtig zu gruppieren.

Verwenden \w für Wort-Zeichen und Standard Klammern statt eckigen Klammern, und du bist der Bewertung nicht PHP-Code in den Ersatz, sind Sie einfach erfasst Textsegmente beziehen, brauchen also nicht die e Flagge:

$pattern = '\b(\w{1,3})\b';
$text = mb_ereg_replace($pattern, '\0VVV', $text, 'm');

Alternativ Verwendung preg_replace mit dem Unicode-Flag:

$text = preg_replace('/\b\w{1,3}\b/um', '\0VVV', $text)

Wenn Sie für arabische und von rechts nach links Zeichen gerecht zu werden brauchen, müssen Sie uns Unicode-Zeicheneigenschaften statt \w und \b (\w Buchstaben nicht von allen Sprachen übereinstimmen, und \b passt nur zwischen \w\W und \W\w - die beide gebrochen wRT. nicht-lateinischen Sprachen.)

Versuchen Sie, diese intead:

$text = preg_replace('/(?

(and again cos I can't tell whether I need to encode < or not)

$text = preg_replace('/(?<!\PL)(\pL{1,3})(?:\PL)/um', '\1VVV', $text);

Andere Tipps

Dies sollte dem entsprechen, was Sie wollen?

\b(?<Match>\w{1,3})\b
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top