preg_replace () Только определенная часть строки

php regex replace preg-replace

10602 просмотра

3 ответа

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

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]);

В итоге остается только та часть, которую я хочу заменить, а не фактически заменить ее!

Автор: Glen Источник Размещён: 12.11.2019 09:43

Ответы (3)


7 плюса

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

$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
  • $ : соответствует концу строки
Автор: HamZa Размещён: 25.07.2013 08:27

2 плюса

Вы могли бы сделать это:

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

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

$parts = explode('/', $image[0]);
unset($parts[3]);
$image[0] = implode('/', $parts);
Автор: PleaseStand Размещён: 25.07.2013 08:49

1 плюс

Вы можете сделать это с помощью простой строки replace:

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

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

$image[0] = preg_replace('~(http://.*?)/wp-content/uploads/(.*)~', '$1/$2', $image[0]);
Автор: cmbuckley Размещён: 25.07.2013 08:21
Вопросы из категории :
32x32