> el cuantificador '?' no es avaricioso
No hay que perder de vista que me expreso como un bobo a menudo
, sobre todo cuando voy rápido y no verifico las cosas.
Lo que quiero enfatizar es que seguimos básicamente a ciegas sobre tu fichero de entrada y el tipo de cosas que buscas.
> O sea, la idea es que me pasan una cadena de caracteres separados por |.
> Estos caracteres pueden ser, si son letras, como máximo 3 y mínimo 2. Si son números, máximo 6 (puede no haber números).
o sea que la cadena:
11111|aa|aas|111111|5|bbb ¿es posible y aceptable para ti?
De hecho no has dicho en ningún momento que lo que buscas tenga que estar al principio de la línea, y por eso sugiero que no pierdas de vista el concepto del tratamiento avaricioso en la búsqueda de las expresiones, por ejemplo
aa|bbb|cc|1|dSegún el punto de vista que adoptes previamente esta cadena puede ser un resultado erróneo o bien 4 resultados válidos o bien 7 resultados aceptables
aa|bbb|cc
aa|bbb|cc|1
aa|bbb
aa|bb
bbb|cc|1
bbb|cc
bb|ccAsí que tienes que controlar ese tema, y eso implica ponerse a meditar sobre qué estás buscando realmente y saber aprovechar las peculiaridades y puntos fuertes de tu archivo de datos.
Probablemente no sería malo verificar a mano un pequeño fragmento de código y ver si se obtienen los mismos resultados que con el
script.
Una alternativa.
Para cada línea:
@valor = split todo por |
next if int($x@valor) > 999999 (campo de más de 6 dígitos)
next if $x@valor tiene menos de dos caracteres y es letra
next if $x@valor tiene más de tres caracteres y es letra, o...
next if $x@valor tiene más de 6 caracteres
etc...