Как проверить, содержит ли данная строка определенную подстроку, используя Perl?
В частности, я хочу увидеть, присутствует ли s1.domain.com
в данной строковой переменной.
Как проверить, содержит ли данная строка определенную подстроку, используя Perl?
В частности, я хочу увидеть, присутствует ли s1.domain.com
в данной строковой переменной.
Чтобы узнать, содержит ли строка подстроку, вы можете использовать функцию index
:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Он вернет позицию первого вхождения $substr
в $str
или -1, если подстрока не найдена.
Другая возможность - использовать регулярные выражения, что является тем, что известно Perl:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Обратные косые черты необходимы, потому что .
может соответствовать любому символу. Вы можете обойти это, используя операторы \Q
и \E
.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Или вы можете сделать это как eugene y и использовать index.
Просто слово предупреждения: Index возвращает a -1
, когда он не может найти совпадение вместо undef
или 0
.
Таким образом, это ошибка:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Это будет неправильно, если s1.domain.com
находится в начале строки. Я лично был сожжен этим не один раз.
Пример нечувствительности к регистру
Это расширение ответа Eugene, которое преобразует строки в нижний регистр перед проверкой подстроки:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}