【问题标题】:Regexp to trim spaces from a string contained in HTML tag正则表达式从 HTML 标记中包含的字符串中修剪空格
【发布时间】:2014-05-19 08:09:56
【问题描述】:

我有这个 HTML 字符串(已验证):

<div><img src="images/stories/2014/AAA.gif" alt="AAA" width="24" height="24" /> THE PRODUCTION OF: PLASTIC BOTTLES   <br /></div>

我必须提取&lt;img&gt; 标记附近的唯一标题,修剪前后的所有空格,而不是将其包装在&lt;h1&gt; 标记中。 加急的结果应该是:

<div><h1>THE PRODUCTION OF: PLASTIC BOTTLES</h1></div>

我已经完成了一个有效的正则表达式,但在最终结果中也包含空格:

/<img\s*src="[^"]+"\s*alt="AAA"\s*width="24"\s*height="24"\s*\/>\s*([^<]+)\s*<br\s*\/>/

altwidthheight 属性的这些特征值可识别图像。 谢谢。

【问题讨论】:

标签: php html regex parsing


【解决方案1】:

让你的匹配不贪心应该可以解决问题:&lt;img\s*src="[^"]+"\s*alt="AAA"\s*width="24"\s*height="24"\s*\/&gt;\s*([^&lt;]+?)\s*&lt;br\s*\/&gt;(注意[^&lt;]+ 旁边的额外?)。更多信息here

话虽如此,您确实应该使用 PHP DOM Parser 之类的东西来处理 HTML。

【讨论】:

    【解决方案2】:

    实际上,有一种非常简单的方法可以完全不使用正则表达式。

    '<div><h1>' . trim(strip_tags($original_html)) . '</h1></div>';
    

    首先删除所有标签,然后修剪空白,最后将其包装在您需要的任何标签中。

    【讨论】:

    【解决方案3】:

    我认为更好的解决方案是使用jQuery。特别是方法.text()

    <div id='mydiv'><img src="images/stories/2014/AAA.gif" alt="AAA" width="24" height="24" /> THE PRODUCTION OF: PLASTIC BOTTLES   <br /></div>`
     <script>var text = $('#mydiv').text();$('#mydiv').html('<h1>' + text + '</h1>');</script>
    

    结果是:

     <div><h1>THE PRODUCTION OF: PLASTIC BOTTLES</h1></div>
    

    【讨论】:

    • 当然,在 jQuery 中很容易做到这一点,但是......也许他宁愿在服务器端做这件事是有原因的,也许他不使用 jQuery,无论如何,如果那个 html 命中站点,浏览器将在 jQuery 重组之前开始加载该图像。如果他的页面上有很多这样的内容,他肯定不希望这样。
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多