Как мне разрешить _ в этом регулярном выражении для этой функции - PullRequest
1 голос
/ 13 марта 2019

У меня есть функция, которая отлично работает при преобразовании ссылок, @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;
}

1 Ответ

1 голос
/ 13 марта 2019

В случае, если вы хотите точно разрешить буквы 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 соответствует любым буквам Юникода, цифрам, а также подчеркиванию (вместе с некоторыми диакритическими знаками и пунктуацией).

...