Coincidencia no codiciosa de Perl
Frecuentes
Visto 1,344 veces
-1
Solo quiero capturar el primer patrón hasta slash_flash.
Intenté esto:
$var1 = slash_flash*_target_bit[*]_slash_hit\n
$var1 =~ s/^(.*)\*?(.*)$/$1/g if ($var1 =~ /\*/);
Obtengo toda la cadena de vuelta:
> $var1 = slash_flash*_target_bit[*]_slash_hit
Nota: $var1 puede comenzar con cualquier cosa. Por lo tanto, no puede iniciar la coincidencia de patrones con una palabra o patrón en particular. Por eso probé (.*)
1 Respuestas
2
Primero, publique el código que realmente ejecutó. Lo que dijiste no es cierto porque lo que publicaste ni siquiera compila.
Continuando.
\*?
puede coincidir con cero caracteres..*
puede coincidir con cero caracteres.
Así que una vez que la primera .*
coincide con toda la cadena, \*?
y .*
felizmente coincide con cero caracteres.
Tal vez quieras
$var =~ s/^([^*]*)\*.*$/$1/g if ($var1 =~ /\*/);
que se puede acortar a
$var =~ s/^([^*]*)\*.*$/$1/;
O incluso a
$var =~ s/^[^*]*\K\*.*$//;
Respondido el 12 de junio de 12 a las 20:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas regex perl regex-greedy or haz tu propia pregunta.
Tenía una pregunta actualizada basada en esto. ¿Cómo hago que el patrón coincida con cualquiera de las dos líneas siguientes? :'code' $var1 = slash_flashold_target_bit[0] o $var1 = clone_flashnew_target_bit[5] cosmo kramer
@cosmo kramer, depende de lo específico que quieras ser
/.*/
funcionaría./^(?:slash_flashold_target_bit\[0\]|clone_flashnew_target_bit\[5\])\z/
coincidiría sólo con esas dos líneas. Tal vez estés buscando algo como/_flashold_target_bit\[[0-9]+\]\z/
. - Ikegami