【问题标题】:Wrap multiple span tags within specific div using preg_replace使用 preg_replace 在特定 div 中包装多个 span 标签
【发布时间】:2016-09-04 09:54:45
【问题描述】:

我有这样的 HTML 代码:

<li class="recipe-ingredient">
<span class="recipe-ingredient-quantity-unit">
<span data-original="" data-fraction="" data-normalized="0" class="recipe-ingredient-quantity recipe-ingredient-quantity"></span> 
<span data-original="" class="recipe-ingredient-unit recipe-ingredient-unit"></span>
</span> 
<span class="recipe-ingredient-name recipe-ingredient-name"><a href="/ingredient/water/">water</a></span> 
<span class="recipe-ingredient-notes recipe-ingredient-notes">For Kneading</span>
</li>

使用preg_replace,我想将第一组&lt;span&gt; 包装在一个&lt;div&gt; 中,并将最后两组&lt;span&gt; 包装在另一个&lt;div&gt; 中,所以我的最终结果是:

<li class="recipe-ingredient">
<div class="ing-qt-unit">
<span class="recipe-ingredient-quantity-unit">
<span data-original="" data-fraction="" data-normalized="0" class="recipe-ingredient-quantity recipe-ingredient-quantity"></span> 
<span data-original="" class="recipe-ingredient-unit recipe-ingredient-unit"></span>
</span>
</div>
<div class="ing-name-notes">
<span class="recipe-ingredient-name recipe-ingredient-name"><a href="/ingredient/water/">water</a></span> 
<span class="recipe-ingredient-notes recipe-ingredient-notes">For Kneading</span>
</div>
</li>

【问题讨论】:

    标签: php regex preg-replace str-replace


    【解决方案1】:

    第一个应该赶上第一组:

    <span class[^>]+>(?:[^<]+<[^>]+>[^<]*<[^>]+>)*[^<]*</span>
    

    这个应该赶上第二组:

    <span class[^>]+>(?:[^<]*<[^>]+>[^<]+<[^>]+>)*[^<]*</span>
    

    这样使用它以避免转义:

    $re = "@<span class[^>]+>(?:[^<]*<[^>]+>[^<]+<[^>]+>)*[^<]*</span>@im";
    

    替换应该类似于"&lt;div class="ing-name-notes"&gt;$0&lt;/div&gt;"

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多