2013-07-25 3 views
4

У меня всегда есть проблемы с регулярным выражением, я в основном имеют URL, например:preg_replace() только определенная часть строки

http://somedomain.com/something_here/bla/bla/bla/bla.jpg

Что мне нужно, это preg_replace(), чтобы заменить something_here с пустую строку и оставить все остальное в такте.

Я попробовал следующее и заменяет неправильные части:

$image[0] = preg_replace('/http:\/\/(.*)\/(.*)\/wp-content\/uploads\/(.*)/','$2' . '',$image[0]); 

Это заканчивается, оставляя только ту часть, я хочу, чтобы заменить, а не на самом деле заменить его!

+2

Использование 'parse_url() 'для этого и выполнить замену на участке пути. –

ответ

1

Вы могли бы сделать это с помощью простой строки заменить:

$image[0] = str_replace('/wp-content/uploads/', '/', $image[0]); 

Или, если вы хотите использовать регулярное выражение:

$image[0] = preg_replace('~(http://.*?)/wp-content/uploads/(.*)~', '$1/$2', $image[0]); 
6

Следующий код основан на описании вы предусмотрели:

$url = 'http://somedomain.com/something_here/bla/bla/bla/bla.jpg'; 
$output = preg_replace('#^(https?://[^/]+/)[^/]+/(.*)$#', '$1$2', $url); 
echo $output; // http://somedomain.com/bla/bla/bla/bla.jpg 

Объяснение:

  • ^: сопрягать начало строки
  • (: старт согласования группа 1
    • https?://: соответствие HTTP или HTTPS протокол
    • [^/]+: матч ничего, кроме / один или несколько раз
    • /: матч /
  • ): конец согласования группа 1
  • [^/]+: соответствует ничего, кроме / один или более раз - /: матч /
  • (: начать согласования группа 2
    • .*: матч ничего ноль или более раз (жадную)
  • ): конец соответствующая группа 2
  • $: Конец матча линии
2

Вы можете сделать это:

$image[0] = preg_replace('!^(http://[^/]*)/[^/]*!', '$1', $image[0]); 

Или вы могли бы рассмотреть только разделив строку для работы на отдельных его компонентов:

$parts = explode('/', $image[0]); 
unset($parts[3]); 
$image[0] = implode('/', $parts); 
Смежные вопросы