WordPress Version: 6.1
/**
* Uses RegEx to extract URLs from arbitrary content.
*
* @since 3.7.0
* @since 6.0.0 Fixes support for HTML entities (Trac 30580).
*
* @param string $content Content to extract URLs from.
* @return string[] Array of URLs found in passed string.
*/
function wp_extract_urls($content)
{
preg_match_all("#([\"']?)(" . '(?:([\w-]+:)?//?)' . '[^\s()<>]+' . '[.]' . '(?:' . '\([\w\d]+\)|' . '(?:' . "[^`!()\\[\\]{}:'\".,<>«»“”‘’\\s]|" . '(?:[:]\d+)?/?' . ')+' . ')' . ")\\1#", $content, $post_links);
$post_links = array_unique(array_map(static function ($link) {
// Decode to replace valid entities, like &.
$link = html_entity_decode($link);
// Maintain backward compatibility by removing extraneous semi-colons (`;`).
return str_replace(';', '', $link);
}, $post_links[2]));
return array_values($post_links);
}