Petsmacker Posted June 26, 2009 Share Posted June 26, 2009 $string2="[url=http://www.example.com]Example[/url] and [url=http://www.example.com]Example[/url] and [url=http://www.example.com]Example[/url]"; preg_match_all("/(\[url=)(.+)(\])(.+)(\[\/url\])/", $string2, $urlmatches); echo "URLs :" . count($urlmatches[0]); echo "<br><br><br>"; $string2="[url=http://www.example.com]Example[/url] and [url=http://www.example.com]Example[/url] and [url=http://www.example.com]Example[/url]"; preg_match_all("/(\[url=)(.+)(\])(.+)(\[\/url\])/", $string2, $urlmatches); echo "URLs :" . count($urlmatches[0]); In the above code, the first section will output '1', despite there being 3 URLs, the second one works correctly and outputs '3' but only because each one is on a new line, is there any way to get the first one to work so multiple URLS on the same line will be counted? (By the way, this isn't my code, I'm aware its full of security holes, I've just cut out the rubbish to show the root problem) Quote Link to comment Share on other sites More sharing options...
Adam Posted June 26, 2009 Share Posted June 26, 2009 Add a question mark after the plus operator to make it not-greedy! (.+) Would become: (.+?) Quote Link to comment Share on other sites More sharing options...
Petsmacker Posted June 26, 2009 Author Share Posted June 26, 2009 I almost feel like breaking into tears the solution was so easy after tearing my hair out for ages. Thank you very, very much. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.