yaz Posted January 18, 2008 Share Posted January 18, 2008 I'm trying to create a function that finds all the links in a paragraph. I found a function that found & replaced links using preg_replace: Code: function urls2linksSimple($text){ //"urls2links - Simple" function by mBread @ SwirlDrop / m-bread web labs ( http://m-bread.com/lab/php/urls2linksSimple ) $pattern = '\b(((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\://)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(/(|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+?))*)($|[^\w/][<\s]|[<\s]|[^\w/]$)'; $replacement = '\'<a href="\'.((\'$4\' == \'\')?\'http://$1\':\'$1\').\'" target="_blank">$1</a>$16\''; return preg_replace('¦'.$pattern.'¦e', $replacement, $text); }; So I want to use the same pattern ($pattern) to just find the links using preg_match and return them in an array. But it thew an error "Delimiter must not be alphanumeric or backslash in...". preg_match($pattern, $text, $matches); Quote Link to comment Share on other sites More sharing options...
dsaba Posted January 18, 2008 Share Posted January 18, 2008 there is a difference between finding links and urls I assume you identify these as "links" if they are in href attributes so to match those: $pat = '~href[\'"]([^\'"]+)[\'"]~i'; preg_match_all($pat, $source, $out); print_r($out[1]); //array of urls in href attribute tags to get just urls from any text: $pat = '~(??(?<=http://|ftp://|https://)(?:http://|ftp://|https://)|)www\.|http://|https://|ftp://)[^\s]+~i'; Quote Link to comment Share on other sites More sharing options...
dsaba Posted January 18, 2008 Share Posted January 18, 2008 '\b(((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\://)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(/(|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+?))*)($|[^\w/][<\s]|[<\s]|[^\w/]$)'; $replacement = '\'<a href="\'.((\'$4\' == \'\')?\'http://$1\':\'$1\').\'" target="_blank">$1[/url]$16\''; return preg_replace('¦'.$pattern.'¦e', $replacement, $text); }; You are using the | delimiter, your pattern uses the | symbol in it, so you must escape it within your pattern or pick a different delimiter that is not used in your pattern. Try using ~ delimiter Quote Link to comment Share on other sites More sharing options...
effigy Posted January 18, 2008 Share Posted January 18, 2008 I found a function that found & replaced links using preg_replace: That pattern is hideous. See if this works. Quote Link to comment Share on other sites More sharing options...
yaz Posted January 18, 2008 Author Share Posted January 18, 2008 Thanks effigy, it worked beautifully. 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.