Pregunta

Estoy tratando de convertir cualquier ocurrencia de una palabra con 3 caracteres o menos a la misma palabra con el VVV cuerda atada a él.
Ejemplo: para -> forVVV
Estoy usando ninguno con caracteres latinos (UTF8), por lo tanto, los MB.
Lo que tengo es:

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

¿Qué me falta?

Aquí es un estudio de caso, vea que las capturas nada:

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

Solución

Usted es el patrón no es detectar o agrupar las cosas bien.

Utilice \w de palabras-personajes y paréntesis estándar en lugar de corchetes, y no se está evaluando código PHP en el reemplazo, usted es simplemente se refiere a segmentos de texto capturados, por lo que no necesitan la bandera e:

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

Alternativamente, el uso preg_replace con la bandera Unicode:

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

Si usted necesita para atender a los caracteres árabes y de derecha a izquierda, es necesario que nos propiedades de caracteres Unicode en lugar de \w y \b (\w no coincide con las cartas de todos los idiomas, y \b sólo coincide entre \w\W y \W\w - que son ambos wRT roto. idiomas no latinos.)

Prueba esta pequeña excursión:

$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);

Otros consejos

Esto debe coincidir con lo que usted quiere?

\b(?<Match>\w{1,3})\b
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top