【问题标题】:Replace string with different strings containing pattern用包含模式的不同字符串替换字符串
【发布时间】:2014-12-17 17:24:02
【问题描述】:

假设你有一个字符串

$str = "<img src='i12'><img src='i105'><img src='i12'><img src='i24'><img src='i15'>....";

是否可以用名为$arr 的数组的nth 值替换每个i+n 例如&lt;img src='i12'&gt;&lt;img src='$arr[12]'&gt; 替换。

【问题讨论】:

    标签: php html arrays search


    【解决方案1】:

    如果我是你,我会简单地解析标记,并相应地处理/更改它:

    $dom = new DOMDocument;
    $dom->loadHTML($str);//parse your markup string
    $imgs = $dom->getElementsByTagName('img');//get all images
    $cleanStr = '';//the result string
    foreach($imgs as $img)
    {
        $img->setAttribute(
            'src',
            //get value of src, chop of first char (i)
            //use that as index, optionally cast to int
            $array[substr($img->getAttribute('src'), 1)]
        );
        $cleanStr .= $dom->saveXML($img);//get string representation of node
    }
    echo $cleanStr;//echoes new markup
    

    工作演示here

    现在在演示中,你会看到 src 属性被替换为$array[n] 之类的字符串,上面的代码会将值替换为数组的值...

    【讨论】:

      【解决方案2】:

      我会为此使用preg_replace

      $pattern="/(src=)'\w(\d+)'/";
      $replacement = '${1}\'\$arr[$2]\'';
      preg_replace($pattern, $replacement, $str);
      

      $pattern="/(src=)'\w(\d+)'/";

      • 它匹配像src='letter + digits'这样的文本块。
      • 这会捕获src= 和数字块,以便能够将它们打印回来。

      $replacement = '${1}\'\$arr[$2]\'';

      • 这使得替换本身。

      测试

      php > $str = "<img src='i12'><img src='i105'><img src='i12'><img src='i24'><img src='i15'>....";
      php > $pattern="/(src=)'\w(\d+)'/";
      php > $replacement = '${1}\'\$arr[$2]\'';
      php > echo preg_replace($pattern, $replacement, $str);
      <img src='$arr[12]'><img src='$arr[105]'><img src='$arr[12]'><img src='$arr[24]'><img src='$arr[15]'>....
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        • 1970-01-01
        • 2021-06-08
        • 2021-08-19
        • 1970-01-01
        相关资源
        最近更新 更多