【问题标题】:PHP Get Twitter username from URL (Regex) [duplicate]PHP从URL(正则表达式)获取Twitter用户名[重复]
【发布时间】:2021-03-04 14:53:07
【问题描述】:

我希望能够从 URL 中提取 Twitter 用户名。

例如:https://twitter.com/jack => 杰克

我发现这个正则表达式很有帮助。

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

twitter URL 包含查询参数时似乎不起作用。

例如 = https://twitter.com/jack?lang=en 返回jack?lang=en

知道如何改进正则表达式来防止这种情况发生吗?

【问题讨论】:

  • ~https?://(?:www\.)?twitter\.com/\K[^/?#]+~
  • 我会改用parse_url
  • 我明白了。我会调查的。谢谢@Jeto
  • 只需删除查询字符串$url = strtok($url, '?');

标签: php regex twitter


【解决方案1】:
preg_match('/https?:\/\/twitter\.com\/(?<name>[^\?]+)\??.*/', 'https://twitter.com/jack?lang=en', $m);
var_dump(trim($m['name']));
$path = parse_url('https://twitter.com/jack?lang=en',PHP_URL_PATH);
var_dump(str_replace('/','', $path));
string(4) "jack"

【讨论】:

  • 你能添加一个关于https?:\/\/twitter\.com\/(?&lt;name&gt;[^\?]+)?\??.*模式的解释吗?这部分(?&lt;name&gt;[^\?]+)? 是可选的。这也是可选的 \?? 并且此 .* 匹配任何字符 0+ 次。因此,https://twitter.com/ 之后的所有内容都是可选的,.* 将匹配整行。
  • 我好像迷路了。我修复了正则表达式。名称部分,当然不是可选的。查询问号是可选的,在它之后也是可选的。所以正则表达式的意思是:scheme、host,然后都是直到问号是名称,然后是字面意思“?”在“?”之后可能不存在任何符号(或没有符号)
猜你喜欢
  • 2011-03-27
  • 2015-08-24
  • 2011-01-19
  • 2012-01-28
  • 2015-10-30
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多