У меня всегда возникают проблемы с регулярным выражением, у меня в основном есть 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]);