ФорумПрограммированиеPHP для идиотов → Помогите с парсингом текста

Помогите с парсингом текста

  • tazman

    Сообщения: 8 Репутация: N Группа: Кто попало

    Spritz 24 августа 2008 г. 10:17

    Пытаюсь написать парсер для текста. Натолкнулся на проблему и ни как не могу решить.
    На вход поступает текст. Когда встречается тэг <!– more –> весь текст следующий после этого тэга нужно открутить.
    Закрытие открытых тагов после этого уже реализовано.
    Как бы это сделать?
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 августа 2008 г. 10:34, спустя 16 минут 55 секунд

    explode("<!– more –>",$text)
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 августа 2008 г. 10:35, спустя 43 секунды

    CTAPbIu_MABP, точно)))
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 августа 2008 г. 10:36, спустя 1 минуту 18 секунд

    $x=preg_match('#(.*)<!– more –>#si', $text);
    вроде так. если не секрет как сделали закрытие открытых тагов?)


    я все видел)))

    ЗЫ 700
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 августа 2008 г. 10:37, спустя 16 секунд

    $x=preg_match('#(.*)<!– more –>#si', $text);
    вроде так. если не секрет как сделали закрытие открытых тагов?)


    ׳, "Когда встречается тэг <!– more –> весь текст следующий после этого тэга нужно открутить". А не до ))

    P.S. Пост изменен при поддержки Старого_Мавра :)
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 августа 2008 г. 10:37, спустя 32 секунды

    CTAPbIu_MABP, бугаго :)))
    adw/0
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 августа 2008 г. 10:38, спустя 23 секунды

    так как сделал закрытие открытых тегов??xD
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 августа 2008 г. 10:40, спустя 2 минуты

    ׳, почитай описание xBB в частности про конечные автоматы

    [реклама]спонсор постов Адворда[/реклама]

    добалено потом

    #(.*)<!– more –>#si

    мне почемуто кажеться что в этой регулярке !– и –> это последовательности и насколько корректно они будут работать я незнаю
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 августа 2008 г. 10:45, спустя 5 минут 9 секунд

    корректно они будут работать я незнаю

    ani rabotaut
  • tazman

    Сообщения: 8 Репутация: N Группа: Кто попало

    Spritz 24 августа 2008 г. 10:51, спустя 6 минут 7 секунд

    Таги закрываются этой функцией:
    function close_dangling_tags($html) {
    #put all opened tags into an array
    preg_match_all ( "#<([a-z]+)( .*)?(?!/)>#iU", $html, $result );
    $openedtags = $result [1];

    #put all closed tags into an array
    preg_match_all ( "#</([a-z]+)>#iU", $html, $result );
    $closedtags = $result [1];
    $len_opened = count ( $openedtags );
    # all tags are closed
    if (count ( $closedtags ) == $len_opened)
    return $this->output ( $html );

    $openedtags = array_reverse ( $openedtags );
    # close tags
    for($i = 0; $i < $len_opened; $i ++) {
    if ($openedtags [$i] != 'hr' && $openedtags [$i] != 'br' && $openedtags [$i] != 'img') {
    if (! in_array ( $openedtags [$i], $closedtags )) {
    $html .= '</' . $openedtags [$i] . '>';
    } else {
    unset ( $closedtags [array_search ( $openedtags [$i], $closedtags )] );
    }
    }
    }
    return $this->output ( $html );
    }

    Ща попробуем ваши варианты. Заранее спасибо.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 августа 2008 г. 11:05, спустя 14 минут 19 секунд

     if ($openedtags [$i] != 'hr' && $openedtags [$i] != 'br' && $openedtags [$i] != 'img') {

    еще тег meta сюда можно запихнуть
  • tazman

    Сообщения: 8 Репутация: N Группа: Кто попало

    Spritz 24 августа 2008 г. 11:43, спустя 38 минут 22 секунды

    В общем, есть два варианта:
    $out=explode("<!– more –>", $truncate);		
    If ($out != '') $truncate = $out[0];
    unset ( $out );

    или

    preg_match('#(.*)<!– more –>#si', $truncate, $out);
    If (!empty($out)) $truncate = $out[0];
    unset ( $out );


    Какой лучше и быстрее?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 24 августа 2008 г. 12:00, спустя 16 минут 22 секунды

    $out=explode("<!– more –>", $truncate);        
    If ($out != '') $truncate = $out[0];
    unset ( $out );
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 августа 2008 г. 12:18, спустя 18 минут 9 секунд

    а чего ты $out сраниваешь со строкой? это ж массив
  • tazman

    Сообщения: 8 Репутация: N Группа: Кто попало

    Spritz 24 августа 2008 г. 12:20, спустя 2 минуты 29 секунд

    If ($out[0] != '') $truncate = $out[0];

    Так лучше? Забыл видимо. Просто нужно если ни чего не заменится выдать текст как он есть.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!