У меня есть функция, которая отлично работает при преобразовании ссылок, @tags и #hashtags в ссылки, однако она не преобразует @tags_underscore или #hashtags_underscore или ссылки с подчеркиванием в них полностью в ссылки, поскольку она пропускает _underscore часть контента.
public function convert_instagram_links( $instagram_caption_a_title ) {
// Create links from @mentions, #hashtags and regular links.
$instagram_caption_a_title = preg_replace( '/((http)+(s)?://[^<>\s]+)/i', '<a href = "$0" target = "_blank">$0</a>', $instagram_caption_a_title );
$instagram_caption = preg_replace( '/[#]+([0-9\p{L}]+)/u', '<a href = "https://www.instagram.com/explore/tags/$1" target = "_blank">$0</a>', $instagram_caption_a_title );
$instagram_caption = preg_replace( '/[@]+([0-9\p{L}]+)/u', '<a href = "https://www.instagram.com/$1" target = "_blank">@$1</a>', $instagram_caption );
return $instagram_caption;
}





Если вы хотите точно разрешить буквы Unicode, цифры ASCII и символы подчеркивания, используйте [0-9\p{L}_] вместо [0-9\p{L}].
Однако здесь вы можете использовать просто сокращенный класс \w:
function convert_instagram_links( $instagram_caption_a_title ) {
// Create links from @mentions, #hashtags and regular links.
$instagram_caption_a_title = preg_replace( '~https?://[^<>\s]+~i', '<a href = "$0" target = "_blank">$0</a>', $instagram_caption_a_title );
$instagram_caption = preg_replace( '/#+(\w+)/u', '<a href = "https://www.instagram.com/explore/tags/$1" target = "_blank">$0</a>', $instagram_caption_a_title );
$instagram_caption = preg_replace( '/@+(\w+)/u', '<a href = "https://www.instagram.com/$1" target = "_blank">@$1</a>', $instagram_caption );
return $instagram_caption;
}
echo convert_instagram_links('@tags_underscore or #hashtags_underscore');
// => <a href = "https://www.instagram.com/tags_underscore" target = "_blank">@tags_underscore</a> or <a href = "https://www.instagram.com/explore/tags/hashtags_underscore" target = "_blank">#hashtags_underscore</a>
См. демонстрация PHP.
Обратите внимание, что \w в регулярном выражении с модификатором u соответствует любым буквам Unicode, цифрам, а также знакам подчеркивания (вместе с некоторыми диакритическими знаками и знаками препинания).
Большое спасибо за быстрое решение!
предложение по улучшению вопроса: 1. предоставить минимум: поместите здесь только 1 регулярное выражение 2. укажите ожидаемый результат и фактический результат 3. добавьте тег, какой язык вы используете.