[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: найти все позиции подстроки
Страницы: 1, 2
McLotos
twin
умеешь ты мотивировать.
а что если простыми str_replace обойтись?
Ну например если в строке найден div то найти его окончание, если это li то найти где закрывающий тег и так проверить нет ли в строке какого-то тега, который нужно закрыть, найти его пару, начиная со строки начала тега до конца тега просто копипастить в массив?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
sergeiss
Цитата (SergeySA @ 9.07.2014 - 01:08)
trpos показывает в какой позиции находится первое вхождение

Не совсем так. Там есть еще 3-й параметр "смещение", которые показывает, в какой позиции находится искомая строка, но поиск надо надо начинать не в начале строки, а в позиции с номером "смещение". При этом надо понимать, что возвращаемая позиция отсчитывается от начала строки.
Идешь циклом, каждый раз выставляя смещение в величину предыдущего вхождения строки + ее длина. На первой итерации, естественно, ноль.

Прочитай внимательнее http://ru2.php.net/manual/ru/function.strpos.php

Что касается регулярок... Да, их надо знать и уметь использовать. Не такие они и сложные smile.gif Вот только надо понимать, где от них польза, а где лучше простые функции работы со строками применить лучше будет вместо селф-брейнфакинга smile.gif

PS. Делал свой анализ кодов подстановки. Там была именно такая же задача: найти вхождения всех заменяемых тэгов. Задача сильно осложнялась тем, что у тэгов могли быть параметры, перечень и количество которых заранее неизвестны. И при наличии параметров нужно выполнять те или иные дополнительные действия.
С регулярками там делать нечего было, кроме как застрелиться сразу. А вот функция strpos() в цикле помогла решить задачу легко, просто и быстро. Плюс ко всему прочему, список тэгов легко расширяется... Короче говоря, одни плюсы.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
Цитата (sergeiss @ 10.07.2014 - 13:58)
strpos() в цикле

я сейчас так и делаю. только вот у меня уже получается 3 цикла вложенных друг в друга
цикл для перебора массива переменных
цикл для перебора массива страницы
цикл для разбора каждого элемента массива страницы и замены в нём найденных переменных

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
SlavaFr

/**
*
@param string $string
*
@param string $fundMe
*
@return array | array with all positions
*/

function stringPositions($string, $findMe, $offset = 0)
{

//read array as param 4
$results = array();
if (func_num_args() == 4 && is_array(func_get_arg(3))) {
$results = func_get_arg(3);
}

//if not found return results
$result = strpos($string, $findMe, $offset);
if ($result === false) {
return $results;
}

//return merged result
return array_merge(
array($result),
stringPositions($string, $findMe, $result + 1, $results)
);

}



//@example
$string = 'abagagaabbuzhabneabp';
$result = stringPositions($string,'ab');
print_r($result);


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.