首页 > 解决方案 > 从推特网址中删除@?

问题描述

我已经设法弄清楚如何从 URL 中获取 Twitter 用户名,但我还需要它来删除 @ ,这我运气不好。

$twitter_url = https://twitter.com/@twitter;

    if (preg_match("/^https?:\/\/(www\.)?twitter\.com\/(#!\/)?(?<name>[^\/]+)(\/\w+)*$/", $twitter_url, $regs)) {

                }

$twitterUsername = $regs['name'];

这很好,但它的显示为...

@twitter

当我只需要它减去@时,我不能 100% 确定如何在正则表达式中执行此操作,有人可以帮忙吗?

标签: phpregex

解决方案


@您可以在组之前添加一个可选的name

'~^https?://(www\.)?twitter\.com/(#!/)?@?(?<name>[^/]+)(/\w+)*$~'
                                       ^^

请参阅正则表达式演示。因此,如果该name部分以 开头@,它将被可选的(但贪婪的)@?子模式所消耗,并且(?<name>[^\/]+)会将 URL 子部分的其余部分抓取到name组中。

请注意,~这里的正则表达式分隔符可能更方便,以免过度转义模式内的正斜杠。

PHP 演示

$re = '~^https?://(www\.)?twitter\.com/(#!/)?@?(?<name>[^/]+)(/\w+)*$~';
$str = 'https://twitter.com/#!/@tweet';
if (preg_match($re, $str, $m)) {
    echo $m['name']; // => tweet
}

推荐阅读