Como posso verificar se uma determinada string contém uma determinada substring, usando Perl?
Mais especificamente, quero ver se s1.domain.comestá presente na variável string fornecida.
Como posso verificar se uma determinada string contém uma determinada substring, usando Perl?
Mais especificamente, quero ver se s1.domain.comestá presente na variável string fornecida.
Respostas:
Para descobrir se uma string contém substring, você pode usar a indexfunção:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Ele retornará a posição da primeira ocorrência de $substrin $str, ou -1 se a substring não for encontrada.
Outra possibilidade é usar expressões regulares, pelas quais o Perl é famoso:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
As barras invertidas são necessárias porque um .pode corresponder a qualquer caractere. Você pode contornar isso usando os operadores \Qe \E.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Ou, você pode fazer como Eugene y declarado e usar o índice de função. Apenas um aviso: o índice retorna um -1quando não consegue encontrar uma correspondência em vez de undefou 0.
Portanto, este é um erro:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Isso estará errado se s1.domain.comestiver no início de sua string. Eu pessoalmente fui queimado nisso mais de uma vez.
index()seja mais rápido do que regexps no caso simples?
=~, mas index(), ~~e match::simpletudo parecia um pouco awkestranho ...: - \
domain.compara corresponder subdomain.domain.comusando o REGEX acima, todas as idéias?
Exemplo de substring que não diferencia maiúsculas de minúsculas
Esta é uma extensão da resposta de Eugene, que converte as strings em minúsculas antes de verificar a substring:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:).