Search code examples
regexperl

extract string between two dots


I have a string of the following format:

word1.word2.word3

What are the ways to extract word2 from that string in perl? I tried the following expression but it assigns 1 to sub:

@perleval $vars{sub} = $vars{string} =~ /.(.*)./; 0@

EDIT:

I have tried several suggestions, but still get the value of 1. I suspect that the entire expression above has a problem in addition to parsing. However, when I do simple assignment, I get the correct result:

@perleval $vars{sub} = $vars{string} ; 0@

assigns word1.word2.word3 to variable sub


Solution

  • Try:

    /\.([^\.]+)\./
    

    . has a special meaning and would need to be escaped. Then you would want to capture the values between the dots, so use a negative character class like ([^\.]+) meaning at least one non-dot. if you use (.*) you will get:

    word1.stuff1.stuff2.stuff3.word2 to result in:

    stuff1.stuff2.stuff3
    

    But maybe you want that?

    Here is my little example, I do find the perl one liners a little harder to read at times so I break it out:

    use strict;
    use warnings;
    
    if ("stuff1.stuff2.stuff3" =~ m/\.([^.]+)\./) {
        my $value = $1;
        print $value;
    }
    else {
        print "no match";
    }
    

    result

    stuff2