【问题标题】:search, replace and regroup with regexp and php使用 regexp 和 php 搜索、替换和重组
【发布时间】:2012-04-28 20:13:05
【问题描述】:

我想用正则表达式搜索和替换一些标签。

这是我的起始字符串:

<p>some bla bla bla</p>
<p class="normale">&bull;bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">&bull;bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
<p>other bla bla bla</p>
<p class="normale">&bull;bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
<p class="normale">•bla bla and bla</p><p class="normale">&bull;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>

所以我想用&lt;li&gt;&lt;/p&gt; 替换所有&lt;p&gt;•&lt;p&gt;&amp;bull;&lt;/li&gt; 并重新组合&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt; 中的每组&lt;ul&gt;&lt;/ul&gt;

目前我已经做了一些测试,下面的代码就是结果,但我认为这不是最好的方法,重组部分也不完整。

搜索和替换

// base string
$test = '<p>some bla bla bla</p>
  <p class="normale">&bull;bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
  <p class="normale">•bla bla and bla</p><p class="normale">&bull;bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
  <p>other bla bla bla</p>
  <p class="normale">&bull;bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
  <p class="normale">•bla bla and bla</p><p class="normale">&bull;bla bla and bla</p>
  <p>other bla bla bla</p>';
// First replace, I don't know but I can't find any • or &bull; with regexp
$text = str_replace(array('•', '&bull;'), '!SUB!', $text);
$regexp = '/(<p( class="normale"){0,}>(!SUB!))(.*?)<\/p>/';
// replace bulled paragraph with li tags
$text = preg_replace($regexp, "<li>$4</li>\n", $text);

但是我找到的重新组合的部分非常困难,我不知道如何进行

【问题讨论】:

  • 1.如果您有多个问题,请发布多个问题。 2. 请重新提出你的问题,因为你不可能知道你真正想要什么。
  • 那么...您想要生成损坏的HTML? (&lt;/p&gt; 没有 &lt;p&gt; 因为你替换了它)
  • 不,我想用&lt;li&gt;{some text}&lt;/li&gt;替换所有&lt;p&gt;&amp;bull;{some text}&lt;/p&gt;..该死的复制粘贴-.-
  • 改用 XML 解析器。 link1link2
  • 所以你的提示是 htmlentities 所有的公牛,并在 xml 解析器中解析字符串,搜索具有 • 的每个段落,替换为 li 并将所有移动到一个名为 ul 的父级中。用几句话写的

标签: php regex search replace


【解决方案1】:

我同意@Colin;但是,上面的Searching and Replace 代码是否符合您的要求?即它是否找到了 • 字符?如果是这样,我建议不要使用!SUB!替换,而是将其包含在您的

正则表达式:
/(

(•|•))(.*?)

/

如果没有,那么您必须找到相应的 ASCII 表示(十六进制或八进制)并将其放在 regex.&lt;br&gt; 中的位置

一旦您走到这一步,XML 解析器就会快速处理其中的重新排序部分。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 2013-12-17
    • 2017-11-24
    • 2012-01-29
    • 2011-06-14
    • 1970-01-01
    • 2010-11-07
    • 2012-08-22
    相关资源
    最近更新 更多