Как я могу проверить, содержит ли данная строка определенную подстроку, используя Perl?
Более конкретно, я хочу увидеть, s1.domain.com
присутствует ли в данной строковой переменной.
Как я могу проверить, содержит ли данная строка определенную подстроку, используя Perl?
Более конкретно, я хочу увидеть, s1.domain.com
присутствует ли в данной строковой переменной.
Ответы:
Чтобы узнать, содержит ли строка подстроку, вы можете использовать index
функцию:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Он вернет позицию первого вхождения $substr
in $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";
}
:
).