Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Получить текст между двумя фрагментами


Автор: Win MK 32 4.2.2014, 14:06
Здравствуйте. Есть некий текст или же html-код (по разному бывает). Нужна функция пользовательская, чтобы у нее было 4 параметра:
1) Строка (текст, код и т.д.)
2) Что должно идти сначала
3) Что должно идти после
4) Номер найденного случая (вдруг так много раз встречается) (ну или пусть не будет третьего параметра, а будет массив)

То есть чтобы в функцию не подавать никаких регулярок.  А просто текст. Приведу пример:

Код

return mysearch_in_some_string("<html>...<div class=\"lalala\">-21<sup>o</sup></div>...</html>", "class=\"lalala\">", "<sup>");

Автор: ksnk 12.2.2014, 07:24
Win MK 32, определись, что надо, а то непонятно же ;)

При чем тут нелюбовь к регуляркам? А про utf8 слышно? А про независимость от регистра?
Код

function mysearch_in_some_string($subj,$start,$fin){
    $i=0;
    if(false!==($s=strpos($subj,$start,$i))) {
        $i=$s+strlen($start);
        if(false!==($f=strpos($subj,$fin,$i))){
            return substr($subj,$i,$f-$i);
        }
    }
    return false;
}

echo mysearch_in_some_string("<html>...<div class=\"lalala\">-21<sup>o</sup></div>...</html>", "class=\"lalala\">", "<sup>");


Пойдет?

Автор: _zorn_ 12.2.2014, 09:59
Цитата(ksnk @  12.2.2014,  15:24 Найти цитируемый пост)
При чем тут нелюбовь к регуляркам?

Наверное имелось ввиду чтобы в качестве параметров не передавать регулярку.
А так
Код

function mysearch_in_some_string($subj,$start,$fin,$pos=0){
  preg_match_all('#'.str_replace('#','\\#',$start).'(.*?)'.str_replace('#','\\#',$fin).'#u',$subj,$m); //регистрозависимый UTF-8
  return $m[$pos][1];
}

Автор: ksnk 12.2.2014, 12:32
_zorn_, Еще можно вспомнить про функций preg_quote, при динамическом создании регулярки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)