简体   繁体   中英

Check whether a string contains a substring

How can I check whether a given string contains a certain substring, using Perl?

More specifically, I want to see whether s1.domain.example is present in the given string variable.

To find out if a string contains substring you can use the index function:

if (index($str, $substr) != -1) {
    print "$str contains $substr\n";
} 

It will return the position of the first occurrence of $substr in $str , or -1 if the substring is not found.

Another possibility is to use regular expressions which is what Perl is famous for:

if ($mystring =~ /s1\.domain\.example/) {
   print qq("$mystring" contains "s1.domain.example"\n);
}

The backslashes are needed because a . can match any character. You can get around this by using the \Q and \E operators.

my $substring = "s1.domain.example";
    if ($mystring =~ /\Q$substring\E/) {
   print qq("$mystring" contains "$substring"\n);
}

Or, you can do as eugene y stated and use the index function. Just a word of warning: Index returns a -1 when it can't find a match instead of an undef or 0 .

Thus, this is an error:

my $substring = "s1.domain.example";
if (not index($mystring, $substr)) {
    print qq("$mystring" doesn't contains "$substring"\n";
}

This will be wrong if s1.domain.example is at the beginning of your string. I've personally been burned on this more than once.

Case Insensitive Substring Example

This is an extension of Eugene's answer, which converts the strings to lower case before checking for the substring:

if (index(lc($str), lc($substr)) != -1) {
    print "$str contains $substr\n";
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM