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); Link to comment https://forums.phpfreaks.com/topic/86598-solved-find-links-in-text-with-preg_match/ 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'; Link to comment https://forums.phpfreaks.com/topic/86598-solved-find-links-in-text-with-preg_match/#findComment-442571 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 Link to comment https://forums.phpfreaks.com/topic/86598-solved-find-links-in-text-with-preg_match/#findComment-442572 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. Link to comment https://forums.phpfreaks.com/topic/86598-solved-find-links-in-text-with-preg_match/#findComment-442783 Share on other sites More sharing options...
yaz Posted January 18, 2008 Author Share Posted January 18, 2008 Thanks effigy, it worked beautifully. Link to comment https://forums.phpfreaks.com/topic/86598-solved-find-links-in-text-with-preg_match/#findComment-442981 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.