Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

(elbie): Regex not behaving as expected

by elbie (Deacon)
on Feb 01, 2003 at 15:44 UTC ( #231848=note: print w/ replies, xml ) Need Help??


in reply to Regex not behaving as expected

Your solution looks very close to a common trick I use, which is to assign a vairable to another variable, then do a regex search and replace on the new one:

my $file = 'file013.txt'; (my $sk = $file) =~ s/^.*?(\d+).*$/$1/;

Which for the sake of this problem is a very similar solution to what others are proposing, the above method is much more useful when I want to keep most of the string rather than a portion of it.

Example, I want to emphasise the word keep above:

my $boring_string = '...when I want to keep most of the string...'; (my $exciting_string = $boring_string) =~ s/(keep)/<b>$1</b>/;

elbieelbieelbie


Comment on (elbie): Regex not behaving as expected
Select or Download Code
Re: (elbie): Regex not behaving as expected
by ihb (Deacon) on Feb 01, 2003 at 16:30 UTC

    If you use .* as "everything else", then be sure to use the /s modifier.   s/^.*?(\d+).*$/$1/s
    Beware of that if there is no digit in $file, then $sk won't change! This is bad. It would look like you need to change \d+ to \d*, but that would make it match "" at the beginning, and so $1 would be empty, thus erasing the whole string.

    But this problem can be solved. By rewriting the pattern to a more natural (?) pattern we'll soon see the solution. First, your pattern can be rewritten to   s/\D*(\d+).*/$1/s
    The anchors are removed, as they're unnecessary. They're unnecessary in your pattern too. Anyhow, now we can change \d+ to \d*, and $sk will be empty if no number was matched. So the result is   (my $sk = $file) =~ s/\D*(\d*).*/$1/s;
    But this still isn't fully analogous with   my ($sk) = $file =~ /(\d+)/;
    since $sk will be the empty string in the former, and the undefined value in the latter. So in extraction situations I often stay away from that trick, and simply use the latter.

    ihb

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://231848]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (9)
As of 2014-08-30 04:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (291 votes), past polls