用正则表达式替换pagebreak标记

时间:2012-04-10 12:53:40

标签: php regex magento preg-replace

这是我努力实现的目标。我们的Magento网上商店的CMS编辑器有一个插入<!-- pagebreak -->标签的按钮。我想使用它来创建阅读更多功能。我以为我会搜索/替换此标签来执行此操作。

我想在<p>代码内搜索,我希望人们可以随时使用此代码。

假设这是我原来的HTML:

<p>This is my example text, but<!-- pagebreak --> this should be readable after 'click more'<!-- pagebreak --> with even more click more possible</p>

我想把它转换成这样的东西..我认为第一个是最容易实现的,也许是通过在while循环中执行preg_replace?第二个可能是更清洁/更好的HTML(更少嵌套)

<p>This is my example text, but <a href="#" onClick='#'>read more</a><div class='hiddenreadmore' id='hiddenreadmore-1'> this should be readable after 'click more'<a href="#" onClick='#'>read more</a><div class='hiddenreadmore' id='hiddenreadmore-2'> with even more click more possible</div></div></p>

<p>This is my example text, but <a href="#" onClick='#'>read more</a><div class='hiddenreadmore' id='hiddenreadmore-1'> this should be readable after 'click more'<a href="#" onClick='#'>read more</a></div><div class='hiddenreadmore' id='hiddenreadmore-2'> with even more click more possible</div></p>

所以我想出了这个,但我认为应该有一种方法来替换它。

$pattern = '#\<p\>(.+?)\<\!-- pagebreak --\>(.+?)\<\/p\>#s';
$count = true;
while ($count) {
    $text = preg_replace($pattern, '<p>$1 <a href="#">read more</a><div class="hidden">$2</div></p>', $text, -1, $count);
}

2 个答案:

答案 0 :(得分:0)

如果您不需要检查它是否在<p>标签中,您可以使用以下内容:

str_replace ( "<!-- pagebreak -->" , '<p>$1 <a href="#">read more</a><div class="hidden">$2</div></p>' , $text, $count );

这对系统来说要轻得多。

答案 1 :(得分:0)

我想这可以胜任:

$pattern = '#\<p>(.*?)\<!-- pagebreak -->(.*?)\</p>#s';
$text = "<p>some test <!-- pagebreak --> hidden content</p> second test <p>lolo <!-- pagebreak --> more hidden content</p>";

echo preg_replace($pattern, '<p>$1 <a href="#">read more</a><div class="hidden">$2</div></p>', $text, -1, $count);