Вот моя ссылка
<img src='http://img.ruphp.com/php/2400.jpg' /><div>© Ham Sammich</div></div>
Я хочу удалить текст после />
создав таким образом ссылку ..
<img src='http://img.ruphp.com/php/2400.jpg' />
Я попытался использовать strstr()
в конце, но у моего vps нет возможности перейти на php5.3, тем самым сделав это не удачным.
Вот мой код, который не работает из-за отсутствия 5.3.
$imgTwo = strstr($img, ">", 1); $img = $imgTwo . ">";
Что является хорошей заменой для того, чтобы сделать это так, как я хочу?
Существует альтернативное решение для метода, заданного @JonathanRich, и оно не включает регулярные выражения .
$result = array_shift(explode('/>', $string)).'/>';
где $string
– ваша строка, а $result
– результат обработки.
Что это значит? В нем говорится: « Разделите строку на« /> »и верните часть до ее первого появления, затем добавьте« /> »к ней и сохраните как $ result ». Это означает, что он делает именно то, что вы хотели 🙂
Вот демонстрация, что это действительно работает: codepad.org/0TTCypA5
Существует альтернативное решение для альтернативного решения 🙂
$result = substr($string, 0, strpos($string, '/>')+2);
демонстрация которого находится здесь: codepad.org/ifyJiaPB . Это говорит: « найдите позицию первого появления« /> »внутри строки и верните все до этого, включая« /> ».
preg_match( '/<img[^>]*>/', $img, $matches);
$ matches [0] будет только тегом img
.
О, темное время перед strstr()
…
Вот несколько возможных способов:
Код: ( Демо с PHP5.2.17 )
$string='<img src=\'http://img.ruphp.com/php/2400.jpg\' /><div>© Ham Sammich</div></div>'; //echo 'strstr: '; //echo strstr($string,'<div>',true); // not in php5.2 echo "strtok: "; echo strtok($string,'>'),'>'; echo "\n\nsubstr/strpos: "; echo substr($string,0,strpos($string,'<div>')); echo "\n\nexplode no limit: "; //echo explode('<div>',$string)[0]; // not in php5.2 echo current(explode('<div>',$string)); echo "\n\nexplode limit 2: "; //echo explode('<div>',$string,2)[0]; // not in php5.2 echo current(explode('<div>',$string,2)); echo "\n\npreg_match: "; //echo preg_match('/<img[^>]*>/',$string,$out)?$out[0]:$string; // not in php5.2 echo preg_match('/<img[^>]*>/',$string,$out)?current($out):$string; echo "\n\npreg_split: "; //echo preg_split('/>\K/',$string,2)[0]; // not in php5.2 echo current(preg_split('/>\K/',$string,2)); echo "\n\npreg_replace: "; echo preg_replace('/<div>.*/','',$string);
Вывод:
strtok: <img src='http://img.ruphp.com/php/2400.jpg' /> substr/strpos: <img src='http://img.ruphp.com/php/2400.jpg' /> explode no limit: <img src='http://img.ruphp.com/php/2400.jpg' /> explode limit 2: <img src='http://img.ruphp.com/php/2400.jpg' /> preg_match: <img src='http://img.ruphp.com/php/2400.jpg' /> preg_split: <img src='http://img.ruphp.com/php/2400.jpg' /> preg_replace: <img src='http://img.ruphp.com/php/2400.jpg' />
strstr($string,'<div>',true);
– это был бы лучший вызов – один вызов функции создает нужную строку, никаких дополнительных вызовов функций, избыточное использование памяти / отсутствие конкатенации. strtok($string,'>'),'>'
– это почти чисто, но не совсем потому, что он может искать только один символ, поэтому мы должны изменить цель, а затем конкатенировать символ в конце. substr($string,0,strpos($string,'<div>'))
– он генерирует нужную подстроку из строки, но выполняет два вызова функций, когда для этой простой задачи желательно только один вызов. current(explode('<div>',$string))
– это генерирует массив неограниченных элементов, только для доступа к первой строке. Это два вызова функций и не очень чистые, поскольку он требует больше работы, чем нужно. current(explode('<div>',$string,2));
– ограничение элементов лучше, чем предыдущий метод взрыва, но применяется тот же принцип: зачем создавать массив, когда вам нужна только строка. preg_match('/<img[^>]*>/',$string,$out)?current($out):'failed';
– это preg_match, preg_split, preg_replace и т. д. шаблоны регулярных выражений, как известно, медленнее, чем функции, не связанные с регулярным выражением. В этом случае нет никакого преимущества в использовании подхода с регулярным выражением. Таким образом, хотя это только один вызов функции, это не самый эффективный способ. Сделайте свой собственный бенчмаркинг, если хотите, но производительность будет неотличима от вашего конечного пользователя для такой небольшой строки.
Следующие критерии будут зависеть от вас. Возможно, вы чувствуете, что один способ легче читать, чем другой, или, может быть, вам нужна функция, которая не задыхается, если отсутствует ожидаемый разделитель.