【问题标题】:In this case which is better in matching regular expression or parse_url [closed]在这种情况下,匹配正则表达式或 parse_url 更好[关闭]
【发布时间】:2013-12-13 11:03:24
【问题描述】:

假设我们有以下链接

$link = "http://www.mysite.com/bbbbbbb.flv?something";

我们想要匹配它。

关于这个问题how to match links that has extension@Thanks to all@ 我们有两种方式regular expressionparse_url

那么我的问题在您的观点和我的网站上哪个更好(例如更快更准确..等)?

方法一 regular expression

if (preg_match('/\.flv(\?|$)/i', $link)) {
    echo 'It has flv';
} else {
    echo 'It does not have';
}

方法二 parse_url

$arr = parse_url($link);

$pathParts = pathinfo($arr['path']);

if ($pathParts['extension'] == 'flv')
   echo "valid extension";
else
   echo "invalid extension";

@谢谢

【问题讨论】:

  • 你在征求意见。这不是这个网站的目的。我会去substr($link, -4, 4) == '.flv'
  • 你不相信文件扩展名,而是检查文件的标题。
  • @Babblo 感谢您的警告,但这将是与上传/下载/流媒体活动无关的外部链接,只是文本文件中显示的链接,但我需要知道它的扩展名以提供一些信息。
  • parse_url 仅在输入字符串是有效 URL 时才有效,而正则表达式甚至可以接受 .FLV。答案取决于您的要求。

标签: php regex parsing


【解决方案1】:

根据this publication,使用内置parse_urlpreg_match慢很多。这是可以理解的,因为正则表达式捕获单个结果,而 parse_url 捕获并解析 url 的所有组件。

【讨论】:

  • 非常感谢您提供这些信息,我一生都认为preg_match 是最慢的
  • 其实是speed vs accuracy范式。编写一个完整的正则表达式来解析 URL 的各种组件可能非常具有挑战性。 parse_url 肯定是在使用有效的 URL。
  • @anubhava touché。如果我们追求准确性,parse_url 每次都会获胜。 (你为什么要重新发明轮子!?)
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多