PHP Соответствующие URL-адреса и использование preg_replace_callback ()

Я использую следующее, чтобы найти все URL-адреса внутри $ content

$content = preg_match_all( '/(http[s]?:[^\s]*)/i', $content, $links ); 

Но это будет зависеть от http:// part в http://www.google.com/some/path .

Мои вопросы:

1 – Как я могу изменить его, чтобы использовать также ссылки, которые начинаются только с www , например, на www.google.com ?

2 – Основная цель – найти ссылки и заменить их значением, которое возвращается из другой функции. Я попробовал preg_match_callback (), но он не работает (возможно, неправильно это использует ..

 $content = preg_replace_callback( "/(http[s]?:[^\s]*)/i", "my_callback", $content); function my_callback(){ // do a lot of stuff independently of preg_replace // adding to =.output... return $output; } 

Теперь, в моей логике (которая, вероятно, неверна), все совпадения из $content будут заменены на $output . Что я делаю не так ?

(пожалуйста, никаких анонимных функций – я тестирую на старом сервере)

EDIT I – после комментариев, пытаясь уточнить с более подробной информацией

 function o99_simple_parse($content){ $content = preg_replace_callback( '/(http[s]?:[^\s]*)/i', 'o99_simple_callback', $content ); return $content; } 

Перезвони :

 function o99_simple_callback($url){ // how to get the URL which is actually the match? and width ?? $url = esc_url_raw( $link ); $url_name = parse_url($url); $url_name = $description = $url_name['host'];// get rid of http://.. $url = 'http://something' . urlencode($url) . '?w=' . $width ; return $url; // what i really need to replace } 

Чтобы изменить регулярное выражение, вам уже нужно разрешить URL-адреса, начинающиеся с www , вы просто напишете это:

 /((http[s]?:|www[.])[^\s]*)/i + ++++++++