Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

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?

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (2)
As of 2023-10-04 22:28 GMT
Find Nodes?
    Voting Booth?

    No recent polls found