Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re: (elbie): Regex not behaving as expected

by ihb (Deacon)
on Feb 01, 2003 at 16:30 UTC ( [id://231851]=note: print w/replies, xml ) Need Help??

in reply to (elbie): Regex not behaving as expected
in thread Regex not behaving as expected

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.


Log In?

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

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (3)
As of 2024-05-22 04:51 GMT
Find Nodes?
    Voting Booth?

    No recent polls found