Регулярки. Как проверить кто родительский блок?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
BikerLex
Сообщения: 97
Зарегистрирован: 2013.03.06, 12:12

Регулярки. Как проверить кто родительский блок?

Сообщение BikerLex »

Допустим есть такая разметка:

Код: Выделить всё

<p></p>
<p></p>
<blockquote>
    <p></p>
    <p></p>
</blockquote>
<p></p>
<p></p> 
И мне надо вставить свой текст в середину, после тега <p></p>.
Для этого запилил такую функцию:

Код: Выделить всё

    $all_p = substr_count($text, '<p>');
        if($all_p % 2 == 0){
            $paragraphAfter = $all_p/2;
        } else {
            $all_p = $all_p + 1;
            $paragraphAfter = $all_p/2;
        }
        $content = explode ( "</p>", $text );
        $text = '';
        for ( $i = 0; $i < count ( $content ); $i ++ ) {
            if ( $i == $paragraphAfter ) {
                $text .= Мой кусок для вставки;
            }
            $text .= "</p>".$content[$i];
        } 
Т.е. для данной разметки мой кусок вставится после 3-го тега <p>
Блок <blockquote> будет расположен в "случайном" месте. Т.е. в другой статье он может быть выше или ниже. Но в случай, если он посредине, как здесь, мне надо пропустить его и запихать свой текст после <p> не входящего в этот блок.
С ругулярками пока проблема. Как проверить входит ли <p> в блок <blockquote>?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Регулярки. Как проверить кто родительский блок?

Сообщение SiZE »

Код: Выделить всё

$start = strpos($text,'<blockquote>');
$end = strpos($text,'</blockquote>');
if ( $start !== false && $end !== false ) {
  $pos = strpos($text,'<p>',$start);
  $bingo = $pos < $end ? true : false;
} 
Аватара пользователя
BikerLex
Сообщения: 97
Зарегистрирован: 2013.03.06, 12:12

Re: Регулярки. Как проверить кто родительский блок?

Сообщение BikerLex »

Что-то не понял как мне это объединить с моей функцией.
Аватара пользователя
BikerLex
Сообщения: 97
Зарегистрирован: 2013.03.06, 12:12

Re: Регулярки. Как проверить кто родительский блок?

Сообщение BikerLex »

anton44eg писал(а):http://stackoverflow.com/a/1732454
Что регулярные выражения тут не помогут я уже понял. :)
Тогда как мне решить эту задачу?
Ответить