我想更改字符串中找到的每个标题的标题。
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;
感谢您的帮助。
答案 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;
请注意,(?<= ... )
是后观正面功能,而(?= ... )
是前瞻性积极功能(请参阅链接)。
参考文献: