Как заменить ##-е совпадение в строке в php? - PullRequest
1 голос
/ 31 августа 2011

Итак, возникает проблема: я хочу вставить объявление после указанного ##-го абзаца.

Позвольте мне показать:

<p><img src="an/images/pic.jpg" /></p>
<p>Intro text</p>
<p>A paragraph</p>
<p>Another paragraph</p>

Я хочу вставить рекламу подвторой абзацОкончательный код должен быть таким:

<p><img src="an/images/pic.jpg /></p>
<p>Intro text</p>
<div>Yepp, let's make money</div>
<p>A paragraph</p>
<p>Another paragraph</p>

Я попробовал несколько регулярных выражений, но я не понимаю.Дамы и господа, пожалуйста, помогите мне.

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Принимая RegEx, совпадают с открытыми тегами, за исключением автономных тегов XHTML , для этого вам может понадобиться парсер DOM / HTML.

<?php
$doc = new DOMDocument;
$doc->loadhtml( getHTML() );

$xpath = new DOMXPath($doc);
$ns = $xpath->query( '/html/body/p[2]' );
if ( 0 < $ns->length ) {
    $parent = $ns->item(0)->parentNode;
    $nextSibling = $ns->item(0)->nextSibling;

    $p = $doc->createElement('p', 'Hi, this is Scott coming to you from another place and time');
    $parent->insertBefore($p, $nextSibling);
}
echo $doc->savehtml();

function getHTML() {
return '<html><head><title>...</title><body>
<p><img src="an/images/pic.jpg" /></p>
<p>Intro text</p>
<p>A paragraph</p>
<p>Another paragraph</p>
</body></html>';
}

print

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title>...</title></head><body>
<p><img src="an/images/pic.jpg"></p>
<p>Intro text</p><p>Hi, this is Scott coming to you from another place and time</p>
<p>A paragraph</p>
<p>Another paragraph</p>
</body></html>
0 голосов
/ 31 августа 2011

Следующий код должен отображать рекламу после каждого тега пятого абзаца и после второго абзаца.Это должно дать вам достаточно, чтобы изменить и заставить его работать.

Он использует две ключевые функции:

Код:

$output = array();
$input = explode('<p>', $input);
foreach($input as $key => $line) {
    $output[] = '<p>' . $line;
    // every fifth paragraph
    if(($key % 5) === 0) {
        $output[] = '<div>Yepp, let\'s make money</div>';
    }
    // second paragraph
    if($key === 1) {
        $output[] = '<div>Yepp, let\'s make money</div>';
    }
}
echo implode('', $output);
0 голосов
/ 31 августа 2011

<p><img src="an/images/pic.jpg" /></p>

Не забудьте поставить «в конце».

Egyébként Jó napot! :)) 1006 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...