我如何在这个正则表达式中允许 _ 这个函数

How do I allow _ in this regex for this function

我有一个函数非常适合将链接、@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="[=10=]" target="_blank">[=10=]</a>', $instagram_caption_a_title );
    $instagram_caption         = preg_replace( '/[#]+([0-9\p{L}]+)/u', '<a href="https://www.instagram.com/explore/tags/" target="_blank">[=10=]</a>', $instagram_caption_a_title );
    $instagram_caption         = preg_replace( '/[@]+([0-9\p{L}]+)/u', '<a href="https://www.instagram.com/" target="_blank">@</a>', $instagram_caption );
    return $instagram_caption;
}

如果您想完全允许 ​​Unicode 字母、ASCII 数字和下划线,请使用 [0-9\p{L}_] 而不是 [0-9\p{L}]

但是,您可以在这里使用 shorthand \w class:

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="[=10=]" target="_blank">[=10=]</a>', $instagram_caption_a_title );
    $instagram_caption         = preg_replace( '/#+(\w+)/u', '<a href="https://www.instagram.com/explore/tags/" target="_blank">[=10=]</a>', $instagram_caption_a_title );
    $instagram_caption         = preg_replace( '/@+(\w+)/u', '<a href="https://www.instagram.com/" target="_blank">@</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 demo

请注意,带有 u 修饰符的正则表达式中的 \w 匹配任何 Unicode 字母、数字和下划线(以及一些变音符号和标点符号)。