2015-10-26 2 views
2

У меня есть этот код:Как заменить строку на большее количество строк в другой строке?

<body> 
    <label id="Label1052">The loop is below</label> 
    <img id="Image733" src="logo-2.png"> 
    <!--the loop--><div id="theLoop"> 
     <label id="Label736">{title}</label> 
     <label id="Label737">{date}</label> 
     <label id="Label739">{content}</label> 
    </div><!--the loop--> 
</body> 

Ожидаемый результат:

<body> 
    <label id="Label1052">The loop is below</label> 
    <img id="Image733" src="logo-2.png"> 
    <!--the loop--><div id="theLoop"> 
     <label id="Label736">Post 1</label> 
     <label id="Label737">Jan 1</label> 
     <label id="Label739">The content</label> 
    </div> 
    <div id="theLoop"> 
     <label id="Label736">Post 2</label> 
     <label id="Label737">Jan 5</label> 
     <label id="Label739">The content</label> 
    </div> 
    <div id="theLoop"> 
     <label id="Label736">Post 3</label> 
     <label id="Label737">Jan 6</label> 
     <label id="Label739">The content</label> 
    </div><!--the loop--> 
</body> 

Вот мой PHP:

// contains the content above 
$markup = "<body>...</body>"; 

// find the loop and get the contents that has tokens 
$match = preg_match("<!--the loop-->(.*)<!--the loop-->"); 

for (var i;i<itemCount;i++) { 
    $item = items[i]; 
    // start to replace content - there are many tokens - I have a function 
    $newContent = replaceTokensInContent($item, $match); 
    $myArray.push($newContent); 
} 

$newContent = $myArray.join(); 

// put the content back into the markup 
$updated_markup = preg_replace("<!--the loop-->(.*)<!--the loop-->", $newContent, $markup); 

Я хочу, чтобы получить содержимое между двумя маркерами <!--the loop-->, а затем заменить маркеры в течение нескольких раз (у меня есть функция), а затем снова верните эту заполненную строку в основную строку.

Я знаю, как сделать это регулярное выражение в JavaScript, но не PHP.

+0

не могли бы вы попытаться положить конец вывода, который вы ищете. –

+2

И каков ваш возможный ожидаемый результат. [Regex - не идеальный инструмент для работы с HTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

+0

@ Учиха из клана листьев и Сашант, я только что обновил вопрос. Я добавлю ожидаемый результат. –

ответ

1

В то время как вы искали способ с регулярными выражениями, вы также можете рассмотреть подход DomDocument, как отмечено в комментариях.

$doc = new DOMDocument(); 
$doc->loadHTMLFile(...); 

$xpath = new DOMXpath($doc); 
$loop = $xpath->query("//*[@id='theLoop']")->item(0); 

Имея $loop, теперь вы можете добавлять, удалять или заменять узлы. Посмотрите на это explanation as a starting point.

Смежные вопросы