[英]search, replace and regroup with regexp and php
我想搜索並用正則表達式替換一些標簽。
這是我的起始字符串:
<p>some bla bla bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p>other bla bla bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p>other bla bla bla</p>
這就是我想要的結果
<p>some bla bla bla</p>
<ul><li>bla bla and bla</li><li>bla bla and bla</li>
<li>bla bla and bla</li><li>bla bla and bla</li><li>bla bla and bla</li></ul>
<p>other bla bla bla</p>
<ul><li>bla bla and bla</li><li>bla bla and bla</li>
<li>bla bla and bla</li><li>bla bla and bla</li>
<li>other bla bla bla</li></ul>
所以我想替換所有<p>•
或<p>•
與<li>
和</p>
與</li>
並重新組合<ul></ul>
每個<li></li><li></li><li></li>
<ul></ul>
目前,我已經進行了一些測試,下面的代碼是結果,但是我認為這不是最好的方法,並且重組部分還不完整。
搜索和替換
// base string
$test = '<p>some bla bla bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p>other bla bla bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">•bla bla and bla</p>
<p>other bla bla bla</p>';
// First replace, I don't know but I can't find any • or • with regexp
$text = str_replace(array('•', '•'), '!SUB!', $text);
$regexp = '/(<p( class="normale"){0,}>(!SUB!))(.*?)<\/p>/';
// replace bulled paragraph with li tags
$text = preg_replace($regexp, "<li>$4</li>\n", $text);
但是重新組合我發現的部分非常困難,而且我不知道如何進行
我同意@Colin; 但是,上面的“ Searching and Replace
代碼是否可以滿足您的要求? 即找到了•字符? 如果是這樣,我建議不要使用!SUB! 替代品,而是將其作為您的一部分
正則表達式:
/(<p(class =“ normale”)?>(&bull; |•))(。*?)</ p> /
如果不是,則必須找到相應的ASCII表示形式(十六進制或八進制),並將其放在regex.<br>
一旦到此為止,XML解析器將快速完成其中的重新排序部分。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.