我想用regexp搜索并替换一些标签。
这是我的首发字符串:
<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>
并重新组合<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);
但重新组合我发现的部分非常困难,我不知道如何继续
答案 0 :(得分:1)
我赞同@Colin;但是,上面的Searching and Replace
代码正在做你想要的吗?即它是否找到了•char?如果是这样,我建议不要使用!SUB!替换,但只是将其作为
正则表达式:/ /(&lt; p(class =“normale”)?&gt;(&amp; bull; |•))(。*?)&lt; / p&gt; /
如果没有,那么你必须找到相应的ASCII表示(十六进制或八进制)并将其放在regex.<br>
一旦你到目前为止,XML解析器将快速处理它的重新排序部分。 : - )