Expresión regular para convertir cualquier 3 caracteres o menos palabra a palabra V
-
21-09-2019 - |
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;
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