将标题更改为字符串中的所有标题

时间:2015-10-30 10:02:57

标签: preg-match-all

我想更改字符串中找到的每个标题的标题。

e.g。使用以下字符串

$newText = ' title2="up_164_hT7PJt6RQZkNEn5.jpg"  title2="up_164_hT7PJt6RQZkNEn5.jpg"  title2="up_164_hT7PJt6RQZkNEn5.jpg" ';

我需要执行preg_match_all以便查找所有实例,然后为每个实例搜索数据库以获取新标题,然后替换。

以下是我已经完成的工作:

$newText = ' title2="up_164_hT7PJt6RQZkNEn5.jpg"  title2="up_164_hT7PJt6RQZkNEn5.jpg"  title2="up_164_hT7PJt6RQZkNEn5.jpg" ';

if ($matches2 = preg_match_all('/.?title2="(.*?)"/', $newText, $repeat2, PREG_PATTERN_ORDER)) {

$replace2 = ' title="'.$title.'"';

for ($x2 = 0; $x2 < $matches2; $x2++) {

    $value = $repeat2[1][$x2];
    $sqlTitle = $mysqli->query("SELECT text FROM files WHERE fileName = '$value' ");
    $rowTitle = $sqlTitle->fetch_array();
    $title[$x2] = $rowTitle[0];
    $replace2 .= $repeat2[1][$x2];

}


$newText = str_replace($repeat2[0][$x2], $replace2, $newText);
}

echo $newText;

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是使用preg_replace_callback函数的一个很好的例子,如下所示:

<?php

$newText = ' title2="up_164_hT7PJt6RQZkNEn5.jpg"  title2="up_164_hT7PJt6RQZkNEn5.jpg"  title2="up_164_hT7PJt6RQZkNEn5.jpg" ';

$newText = preg_replace_callback(
    '/(?<=\stitle2=")[^"]*(?=")/',
    function ($match) {
        $sqlTitle = $mysqli->query("SELECT text FROM files WHERE fileName = '{$match[0]}' ");
        $rowTitle = $sqlTitle->fetch_array();
        return $rowTitle[0];
    },
    $newText);

echo $newText;

请注意,(?<= ... )是后观正面功能,而(?= ... )是前瞻性积极功能(请参阅链接)。

参考文献: