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

Re: Help with placing the matches of a regex into an Array

by JavaFan (Canon)
on Apr 28, 2012 at 20:06 UTC ( [id://967859]=note: print w/replies, xml ) Need Help??


in reply to Help with placing the matches of a regex into an Array

Replacing [.]+ with .+ appears to work. For now. But considering that you have a trailing /g, you are expecting multiple matches on a line.

Your pattern will never match more than once, due to the greedy .+. I suggest to use

/onclick="document\.location\.href='([^']+)'"/g
as your pattern match.

Replies are listed 'Best First'.
Re^2: Help with placing the matches of a regex into an Array
by stevieb (Canon) on Apr 28, 2012 at 20:39 UTC

    ahhhh, of course. Thanks JavaFan. In my example above, the /g isn't needed due to the fact I was reading a line at a time, but kept it in as I (correctly) assumed the OP would have multiple links in a scalar glob. Since I didn't test it as such though, I missed this bug.

    I'm far from an expert in regexes, so I'm wondering if using the non-greedy operator essentially does the same thing in this case... or is there possibly something else I am missing that you see?

    /onclick="document\.location\.href='(.+?)'"/g
      It depends on the data -- if the data is incorrectly formatted (a missing ' for instance), they may not do the same thing. And '.+?' has the tendency to be slower than '[^']+'. Usually, the more restrictive a pattern is, the faster: there's less opportunity to backtrack. There's much more commitment in '[^']+' then there is in '.+?': the former will always match two quotes in succession, and whatever is in between, regardless how the rest of the pattern looks like, but that's not the case with '.+?'; there's nothing stopping the .+? part to match quotes.

        Thank you for your explanation. I'm still working on bettering my understanding of the look-ahead/backtrack aspects when working with Perl regexs. You've made it very clear to me here with this example.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (7)
As of 2024-04-18 12:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found