1

我有一个看起来像这样的链接http://site.com/numbers_and_letters/This_is_what-I-need_to-retrieve.html

我基本上需要检索这部分:This_is_what-I-need_to-retrieve 并且还用空格替换破折号和下划线,所以它最终看起来像这样:This is what I need to retrieve

我是正则表达式的新手,所以这就是我正在使用的:(它可以工作但性能很差)

function clean($url)
{
    $cleaned = preg_replace("/http:\/\/site.com\/.+\//", '', $url);
    $cleaned = preg_replace("/[-_]/", ' ', $cleaned);
    //remove the html extension
    $cleaned = substr($cleaned, 0,-4);  
    return $cleaned;
}
4

1 回答 1

1

你所拥有的并没有那么糟糕。但也许您可以尝试将其性能与此进行比较:

preg_match('[^/]+$', $url, $match);
$cleaned = preg_replace('[-_]', ' ', $match);

编辑:

如果你只有一把锤子,那么一切看起来都像钉子。

完全避免正则表达式怎么样?(我假设每个输入都是一个有效的 URL。)

$cleaned = strtr(substr($url, strrpos($url, '/') + 1, -5), '-_', '  ');

这甚至删除了.html扩展!(我所做的假设与您似乎已经做出的所有假设相同,所有链接都以 . 结尾.html。)简要说明:

  • strtr 一组字符(例如 -_)转换为另一组中的相应字符(例如空格)。(我想它会比调用整个正则表达式引擎更有效。)
  • substr,你必须知道,但请注意,如果最后一个参数为负数,例如 -5,它表示从末尾开始忽略的字符数。在这种情况下很方便,而且可能比正则表达式更有效。
  • strrpos,当然,查找字符串中字符的最后位置,例如 /
于 2013-04-27T07:32:19.530 回答