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