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