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 に答える