【问题标题】:How to wrap element if not already wrapped?如果尚未包装,如何包装元素?
【发布时间】:2016-02-28 03:24:05
【问题描述】:

我有一组内容,其中一些<img> 标签被包装在一个跨度标签中,如<span class="the-image"><img src.... /></span>,但一些图像尚未包装。我想使用 preg_replace 创建一个正则表达式,将此包装器添加到所有没有它的 img 标签中。

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    享受吧!

    preg_replace('/(?!\<span\sclass="the-image"\>)(<img[\sA-Z"\-_=\/.\d]*\/\>)(?!\<\/span\>)/i','<span class="the-image"\>$0</span>',$code);
    

    正则表达式示例和说明 https://regex101.com/r/cX8iL6/3

    编辑

    PHP preg_replace 示例

    $code = <<< EOT
    <span class="the-image"><img src="123" /></span><br />
    <img src="1234" /><br />
    <span class="the-image"><img src="blah/blah/blah" /></span>
    EOT;
    
    $code = preg_replace('/(?!\<span\sclass="the-image"\>)(<img[\sA-Z"\-_=\/.\d]*\/\>)(?!\<\/span\>)/i','<span class="the-image"\>$0</span>',$code);
    
    /* $code will become this
    
    <span class="the-image"><img src="123" /></span><br />
    <span class="the-image"><img src="1234" /></span><br />
    <span class="the-image"><img src="blah/blah/blah" /></span>
    
    */
    

    EDIT 2将正则表达式更改为 PHP 以反映 OP 所需的答案

    【讨论】:

    • 你确定吗?您在第二张图片上仍有开放跨度。
    • 是的,这样&lt;span ..&gt;&lt;img src="..." ... /&gt;就会变成&lt;span ..&gt;&lt;img src="..." ... /&gt;&lt;/span&gt;
    • 链接不做替换,它只是显示正则表达式如何匹配
    • 目标应该是尚未包装的图像。我的意思是只是 img 标签的那个。
    • 是的,所有没有 结束包装的 img 标签都将被我的代码包装。
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多