Esto no es algo que normalmente haría uso de una expresión regular para, pero mi solución no es exactamente lo que llamarían "bello":
$string = join("", map(ucfirst, split(/(\s+)/, $string)));
Eso split()
s por la cadena de espacios en blanco y captura todas las el espacio en blanco, luego recorre cada elemento de la lista y hace ucfirst
en ellos (convirtiendo el primer carácter en mayúscula), luego join()
s los vuelve a juntar como una sola cuerda. No es horrible, pero quizás te guste una expresión regular más. Personalmente, simplemente no me gustan los \Q
o \U
u otras construcciones regex semi torpes.
EDITAR: Alguien más mencionó que la puntuación podría ser un problema potencial. Si, por ejemplo, desea que esta:
...string
cambiado a esto:
...String
es decir, quiere que las palabras en mayúsculas incluso si no hay puntuacion delante de ellos, a intentar algo más a esto:
$string = join("", map(ucfirst, split(/(\w+)/, $string)));
Lo mismo, pero es split()
s en las palabras (\w+
) para que los elementos capturados de la lista sean solo palabras. Mismo efecto general, pero se escriben en mayúsculas las palabras que no pueden comenzar con un carácter de palabra. Cambie \w
a [a-zA-Z]
para eliminar el intentar capitalizar números. Y, en general, modifícalo como quieras.
¿Qué estás tratando de hacer? Si estás tratando de hacer las cosas del caso del título? Hay un perlfaq para eso. –
preguntando por SO es más rápido, y estoy seguro de que beneficiará a alguien más en algún lugar del mundo una vez que google lo indexe. No uso Perl con la frecuencia suficiente como para recordar todos los trucos que solía saber. – Kip