Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Removing first part of string with regex

by pdcawley (Hermit)
on Jan 02, 2009 at 14:21 UTC ( #733759=note: print w/replies, xml ) Need Help??


in reply to Removing first part of string with regex

Let's rewrite your regular expression with the (?x) flag and comment it shall we? That gives us
qr{(?smx) \.? # Match the first instance of 0 or 1 one periods ( # then capture \S+ # one or more non whitespace characters ) }
So, if we follow that recipe on the string human.NT_113898, the matcher looks at the start of the string, sees that the test for 0 or 1 periods succeeds there, so it scarfs up the rest of the string into $1. Which isn't what you wanted. What you actually want depends a little on what you're expecting as input. Assuming that there's always going to be at least one period in the input string, something like
qr{(?smx) \. # Find a full stop (.*) # and capture everything after it }
will do. However, f there's the possibility of there not being a period, you might have to do
qr{(?smx) ^ # From the beginning (?: # In a group... [^.]* # Match any character except period, any number of times \. # followed by a period )? # math the group 0 or 1 times (.*) # then capture everything else }
If there's a trick to understanding why a regular expression doesn't do what you want, it's to break it down like this and go through each subexpression and explain to yourself what it's trying to match. Most of the time this narrative approach will lead you to your bug and to its fix remarkably quickly.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://733759]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2016-12-03 18:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:













    Results (56 votes). Check out past polls.