Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

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

by JavaFan (Canon)
on Apr 28, 2012 at 20:06 UTC ( #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.


Comment on Re: Help with placing the matches of a regex into an Array
Select or Download Code
Replies are listed 'Best First'.
Re^2: Help with placing the matches of a regex into an Array
by stevieb (Curate) 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
Node Status?
node history
Node Type: note [id://967859]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (11)
As of 2015-07-28 11:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (254 votes), past polls