У меня есть строка, которая выглядит так:
$string = '<a href="http://google.com">http://google.com</a>';
Как удалить часть http://
из текста ссылки, но оставить ее в атрибуте href?
Без использования полноразмерного парсера это может сделать трюк для большинства ситуаций …
$str = '<a href="http://google.com">http://google.com</a>'; $regex = '/(?<!href=["\'])http:\/\//'; $str = preg_replace($regex, '', $str); var_dump($str); // string(42) "<a href="http://google.com">google.com</a>"
Он использует отрицательный lookbehind, чтобы убедиться, что перед ним нет href="
или href='
.
Посмотрите на IDEone .
Он также учитывает людей, которые делят свои значения атрибутов на '
.
$string = '<a href="http://google.com">http://google.com</a>'; $var = str_replace('>http://','>',$string);
Просто попробовал это на IDEone.com, и он имеет желаемый эффект.
В этом простом случае функция preg_replace
, вероятно, будет работать. Для большей стабильности попробуйте использовать DOMDocument
:
$string = '<a href="http://google.com">http://google.com</a>'; $dom = new DOMDocument; $dom->loadXML($string); $link = $dom->firstChild; $link->nodeValue = str_replace('http://', '', $link->nodeValue); $string = $dom->saveXML($link);
Любое простое выражение или код замены строки, вероятно, сбой в общем случае. Единственный «правильный» способ сделать это – фактически разобрать кусок как фрагмент SGML / XML и удалить значение http://
из значения.
Для любого другого (достаточно короткого) кода манипуляции с строкой поиск встречного примера, который его разрывает, будет довольно простым.
Предполагая, что «http: //» всегда появляется дважды в строке $ string, найдите строку для «http: //» назад с помощью strripos. Если поиск будет успешным, вы узнаете start_index из «http: //», который хотите удалить (и знаете, конечно). Теперь вы можете использовать substr для извлечения всего, что происходит до и после фрагмента, который вы хотите удалить.
$str = 'http://www.google.com'; $str = preg_replace('#^https?://#', '', $str); echo $str; // www.google.com
который будет работать как для http: //, так и для https: //
текущий код
$string = '<a href="http://google.com">http://google.com</a>'; $var = explode('http://',$string); echo $var[2];