用包含pattern的不同字符串替换字符串

时间:2014-10-22 09:33:04

标签: php html arrays search

假设你有一个像

这样的字符串
$str = "<img src='i12'><img src='i105'><img src='i12'><img src='i24'><img src='i15'>....";

是否可以将每个i+n替换为名为n的数组的$arr值 因此,例如<img src='i12'>替换为<img src='$arr[12]'>

2 个答案:

答案 0 :(得分:3)

如果我是你,我只需解析标记,然后相应地处理/修改它:

$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]之类的字符串,上面的代码将使用数组值替换值...

答案 1 :(得分:0)

我会使用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]'>....