2012-06-27 2 views
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? для моих примеров должно быть:

$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'; 

ответ

3
$one = 'http://www.site.com/first/1/two/2/number/33/three/3'; 
$one = preg_replace('/\/number\/\d+/', '', $one); 
echo $one; 
0

Я хотел бы предложить следующую схему:

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

Причины:

  1. Модификатор i поймает URLs как '/ NumBer/42'
  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 
Смежные вопросы