string - tester - perl=~
Verificar si una cadena contiene una subcadena (3)
¿Cómo puedo verificar si una cadena dada contiene una cierta subcadena usando Perl?
Más específicamente, quiero ver si s1.domain.com
está presente en la variable de cadena dada.
Otra posibilidad es usar expresiones regulares, que es por lo que Perl es famoso:
if ($mystring =~ /s1/.domain/.com/) {
print qq("$mystring" contains "s1.domain.com"/n);
}
Las barras diagonales inversas son necesarias porque a .
puede coincidir con cualquier personaje. Puede evitar esto utilizando los operadores /Q
y /E
my $substring = "s1.domain.com";
if ($mystring =~ //Q$substring/E/) {
print qq("$mystring" contains "$substring"/n);
}
O bien, puede hacer lo que eugene declaró y usar la función de index . Solo una palabra de advertencia: Index devuelve un -1
cuando no puede encontrar una coincidencia en lugar de undef
o 0
.
Por lo tanto, este es un error:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn''t contains "$substring"/n";
}
Esto será incorrecto si s1.domain.com
está al principio de su cadena. Personalmente me he quemado de esto más de una vez.
Para saber si una cadena contiene una subcadena, puede usar la función de index
:
if (index($str, $substr) != -1) {
print "$str contains $substr/n";
}
Devolverá la posición de la primera aparición de $substr
en $str
, o -1 si no se encuentra la subcadena.
Ejemplo de subcadena insensible a mayúsculas y minúsculas
Esta es una extensión de la respuesta de Eugene, que convierte las cadenas en minúsculas antes de buscar la subcadena:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr/n";
}