1

私は多くのURL(文字列)を持っています:

        $one = 'http://www.site.com/first/1/two/2/three/3/number/342';
        $two = '/first/1/two/2/number/32';
        $three = 'site.com/first/1/three/3/number/7';
        $four = 'http://www.site.com/first/13/two/2/three/33/number/33/four/23';

PHPでこの変数/number/xを削除するにはどうすればよいですか? 私の例は次のようになります。

    $one = 'http://www.site.com/first/1/two/2/three/3';
    $two = '/first/1/two/2';
    $three = 'site.com/first/1/three/3';
    $four = 'http://www.site.com/first/13/two/2/three/33/four/23';
4

2 に答える 2

3
$one = 'http://www.site.com/first/1/two/2/number/33/three/3';
$one = preg_replace('/\/number\/\d+/', '', $one);
echo $one;
于 2012-06-27T12:23:54.930 に答える
0

次のパターンをお勧めします。

'@/number/[0-9]{1,}@i'

理由は次のとおりです。

  1. i修飾子は「/Number/42」のような URL をキャッチします
  2. を使用@してパターンを区切ると、パターンがはるかに読みやすくなり、スラッシュをエスケープする必要性が軽減されます (例: \/\d+)
  3. [0-9]{1,}は よりも冗長ですが、意図がより明確に\d+なるという追加の利点があります。

以下は、その使用法のデモです。

<?php

$urls[] = 'http://www.site.com/first/1/two/2/three/3/number/342';
$urls[] = '/first/1/two/2/number/32';
$urls[] = 'site.com/first/1/three/3/number/7';
$urls[] = 'http://www.site.com/first/13/two/2/three/33/number/33/four/23';
$urls[] = '/first/1/Number/55/two/2/number/32';

$actual = array_map(function($url){
  return preg_replace('@/number/[0-9]{1,}@i', '', $url);
}, $urls);

$expected = array(
  'http://www.site.com/first/1/two/2/three/3',
  '/first/1/two/2',
  'site.com/first/1/three/3',
  'http://www.site.com/first/13/two/2/three/33/four/23',
  '/first/1/two/2'
);

assert($expected === $actual); // true
于 2012-06-27T16:33:18.737 に答える