dqeonr8554 2013-07-29 10:52
浏览 95
已采纳

PHP:使用preg_replace过滤一些html属性。 获得第一个</ span>,而不是最后一个

I'm trying to filter an HTML file to remove some attributes. Specifically, I want to remove ALL spans except the ones that set a color. In the spans that set a color I will remove all the attributes except the style='color...'.

I.e., if I have:

<span lang=EN-US>This is a </span>
<span id="myspan" style='color:red;text-align:left;'>test</span>
<span lang=EN-US> to remove spans.</span>

I want it to be:

This is a
<span style='color:red'>test</span>
to remove spans.

To do this I'm using preg_replace. I created this regex:

preg_replace(
    '%(<span [^>]*color\:)([a-z]*)(;|\')([^>]*>)(.*)(<\/span>)%s', 
    "<qwerty style='color:$2'>$5</qwerty>", 
$myText);

After using this, I remove all spans with strip_tags and then I turn all <qwerty> to <span>.

My problem is that the content between <span> and </span> ((.*) in my regex) is getting all the text until the end:

This is a 
<span style='color:red'>test
to remove spans.</span>

I want it to get all the text until it finds the first </span>, but now it gets all the text until the last </span>. How can I do this?

Thanks!

  • 写回答

1条回答 默认 最新

  • doujiazong0322 2013-07-29 11:04
    关注

    Use ungreedy (U) modifier:

    preg_replace('%....%sU', .....);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?