REGEX zu konvertieren 3 beliebige Zeichen oder weniger Wort zu Wort V
-
21-09-2019 - |
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;
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