Jump to content

[SOLVED] find links in text with preg_match


yaz

Recommended Posts

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);

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';

'\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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.