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

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

http://img.ruphp.com/php/f

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

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

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

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

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

 $url = 'http://img.ruphp.com/php/f'; $output = preg_replace('#^(https?://[^/]+/)[^/]+/(.*)$#', '$1$2', $url); echo $output; // http://img.ruphp.com/php/f 

Объяснение:

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

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

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

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

 $parts = explode('/', $image[0]); unset($parts[3]); $image[0] = implode('/', $parts); не $parts = explode('/', $image[0]); unset($parts[3]); $image[0] = implode('/', $parts); 

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

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

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

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