【问题标题】:PHP preg match / replace?PHP预匹配/替换?
【发布时间】:2011-03-04 14:57:51
【问题描述】:

我需要读取字符串 $mysting 并替换所有事件的 e.x.

<img src="dummypic.jpg alt="dummy pic">

<img src="dummypic.jpg alt="dummy pic" title="dummy pic">

也就是说在缺少的地方加上标题,并使标题标签和alt标签的值相同。

有些事件我有额外的参数,比如边框、带、高度 - 这些应该保持不变......

【问题讨论】:

  • tinyurl.com/cm8ea5 如果您需要社区的更快响应,请发布您已经尝试过的代码。
  • 请注意,title 和 alt 是属性,而不是标签。从技术上讲,图像标签不需要标题属性,因为屏幕阅读器使用 alt 属性,并且当图像被禁用以显示图像描述时,但这不是重点:-)

标签: php regex preg-replace preg-match


【解决方案1】:

查看PHP DOMDocument 来修改属性而不是正则表达式,尤其是在有任何复杂性的情况下。

【讨论】:

    【解决方案2】:

    您可以使用 phpQuery 或 QueryPath 来做到这一点:

    $qp = qp($html);
    foreach ($qp->find("img") as $img) {
        $img->attr("title", $img->attr("alt"));
    }
    print $qp->writeHTML();
    

    虽然在这种简单的情况下使用正则表达式可能是可行的:

    preg_replace('#(<img\s[^>]*)(\balt=)("[^"]+")#', '$1$2$3 title=$3', $h);
    

    (使用 preg_replace_callback 来确保不存在 title= 属性会更有意义。)

    【讨论】:

      【解决方案3】:

      您确实想使用 html 解析器而不是正则表达式来执行此操作。正则表达式不适合 html 处理。

      【讨论】:

      • 请提供一个例子,而不是笼统的建议。
      • 好吧,OP 没有发布他的代码......我认为任何人都回答是非常友好的。
      【解决方案4】:

      我的答案是一个众所周知的答案的链接!

      RegEx match open tags except XHTML self-contained tags

      【讨论】:

      • 那更适合放在评论里
      • 我的答案是对另一个答案的推荐,这完全符合 IMO 的答案标准
      【解决方案5】:

      我通常在这些类型的情况下编写快速肮脏的技巧(通常使用结构化数据,可能存在不一致,例如模板引擎标签、条件等)。 IMO 这是一个糟糕的解决方案,但我可以超快地破解这些脚本。

      例如。

      <?
      $html = '
      <img src="dummypic.jpg" alt="dummy pic">
      <img src="dummypic2.jpg" alt="dummy pic 2">
      
      blahaahhh
      
      <img src="dummypic.jpg" alt="dummy pic">
      <img src="dummypic2.jpg" alt="dummy pic 2">
      ';
      
      $tags = explode('<img', $html);
      
      for ($i = 1; $i < count($tags); $i++)
      {
          $src = explode('src="', $tags[$i]);
          $src = explode('"', $src[1]);
          $src = str_replace('.jpg', '', $src[0]);   
      
          $tags[$i] = '<img title="' . $src . '"' . $tags[$i];
      }
      
      echo implode('', $tags);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 2021-05-28
        • 2013-12-26
        相关资源
        最近更新 更多