Question

Je suis en train de convertir toute occurrence d'un mot avec 3 caractères ou moins au même mot avec le VVV string attaché.
Exemple: pour -> forVVV
J'utilise aucun caractères latins (UTF8), d'où le MB.
Ce que j'est:

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

Qu'est-ce que je suis absent?

Voici une étude de cas, voir les captures rien:

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

La solution

Vous êtes modèle ne détecte pas ou regroupement choses.

Utilisez \w pour mot-caractères et entre parenthèses standard au lieu de crochets, et vous n'êtes pas évaluer du code PHP dans le remplacement, vous êtes tout simplement référence à des segments de texte capturés, ne doivent donc pas le drapeau e:

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

Vous pouvez également utiliser preg_replace avec le drapeau unicode:

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

Si vous avez besoin pour répondre à l'arabe et de droite à gauche personnages, vous avez besoin de propriétés de caractère unicode au lieu de \w et \b (\w ne correspond pas à des lettres de toutes les langues, et \b correspond seulement entre \w\W et \W\w - qui sont tous deux WRT cassé. langues non latines.)

Essayer cette 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);

Autres conseils

Cela devrait correspondre à ce que vous voulez?

\b(?<Match>\w{1,3})\b
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top