2011-07-28 32 views

Respuesta

3

edición: Esto funciona para mí

$pattern = "/(?<=(\s\w{10}))(\w*\s)/"; 

Este patrón coincide con eficacia cualquier carácter caracteres de palabra seguido de un espacio, que fueron precedida por un espacio y 10 caracteres de palabra.

A continuación, sólo llamar a algo como esto:

preg_replace($pattern,"... ",$string); 

Espero que ayude :)

editado: En realidad debería utilizar \s en lugar de espacio, este coincidirá con cualquier carácter de espacio en blanco.

+0

esto encuentra las palabras> 10 caracteres, pero no truncar/anexar. lo que estoy buscando es algo que toma: abcdefghijklmnop -> abcdefghij ... – lcdservices

+0

@Brian Edited, '" joop jopjopjopjopjop joop "' devuelve 'joop jopjopjopj ... joop' now :) – CookieMonster

+0

más cerca - me estoy poniendo una rareza donde solo reemplaza si la cadena es seguida por un salto de línea. y cuando reemplaza, elimina el salto de línea. por lo que: longwordlongword longwordlongword -> longwordlo ... longwordlo ... – lcdservices

2

Supongo que esta expresión regular hace el truco. Probé usando php 5.3.6 y funcionó bien.

$pattern = "/(\\b\\w{10})\\w+\\b/"; 
echo preg_replace($pattern, "$1...", "pequeno palavramedia palavrabemgrandemesmo\n"); 

¿Dónde está {10} se debe reemplazar por el tamaño máximo permitido sin reemplazo. Si desea un tamaño de palabra máximo de N, debe usar {N-3}, debido a la longitud de los puntos.

Debe funcionar bien para cadenas grandes, porque describe un lenguaje normal y el tiempo de ejecución debe ser O (n). Por supuesto, depende de la implementación de regex.

Cuestiones relacionadas