por explorer » 2010-03-20 18:11 @799
No, no captura nada porque el texto no coincide con la expresión regular.
El texto es un conjunto de letras ('hola'). Y tu estás indicando en la expresión regular que estás esperando un conjunto de letras alfanuméricas (\w+) seguidas de un dígito, que no vas a capturar ((?:\d)). Y como en el texto no hay un dígito, pues por eso falla.
Cuando se dice que no se va a capturar, no es lo mismo que decir que queremos que su presencia sea opcional.
Si lo que querías es decir que el dígito puede estar o no, debes hacerlo con un '?' a continuación:
m/(\w+(?:\d?))/
De esta manera, capturamos todas las palabras que terminen, o no, con un dígito. Y lo que se devuelve en $1 es esa palabra incluido el dígito (los paréntesis de captura rodean a toda la expresión regular).
Si solo quieres detectar patrones de cadenas de caracteres, posiblemente seguidos de un dígito, y solo capturar hasta el último dígito, sería algo así:
m/([a-z]+)\d?/
El indicador '\w' representa a caracteres alfanuméricos, así que eso también incluye a los dígitos. Si usáramos '\w' nos devolverá también a los dígitos, en cualquier caso. Usando '[a-z]' reducimos la búsqueda a solamente los alfabéticos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES