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.