好的,所以我的问题非常简单。我希望答案也是。 假设我有以下php字符串:
<!DOCTYPE html>
<html>
<head>
<title>test file</title>
</head>
<body>
<div id="dynamicContent">
<myTag>PART_ONE</myTag>
<myTag>PART_TWO </myTag>
<myTag> PART_THREE</myTag>
<myTag> PART_FOUR </myTag>
</div>
</body>
</html>
让我们说这是$ content。 现在,你可以看到我有4个带有一个单词内容的自定义标签(myTag)。 (PART_ONE,PART_TWO等) 我想用4个不同的字符串替换那4个。后4个字符串在数组中:
$replace = array("PartOne", "PartTwo", "PartThree", "PartFour");
我这样做了,但它没有成功:
$content = preg_replace("/<myTag>(.*?)<\/myTag>/s", $replace, $content);
所以,我想搜索myTags(它找到4)并用数组的一个条目替换它。第一次出现应该用$ replace [0]替换,第二次用$ replace [1]替换,等等。 然后,它将“new”内容作为字符串(而不是数组)返回,因此我可以将其用于进一步解析。
我应该如何实现这一点?
答案 0 :(得分:1)
以下内容应该有效:
$replace = array("PartOne", "PartTwo", "PartThree", "PartFour");
if (preg_match_all("/(<myTag>)(.*?)(<\/myTag>)/s", $content, $matches)) {
for ($i = 0; $i < count($matches[0]); $i++) {
$content = str_replace($matches[0][$i], $matches[1][$i] . $replace[$i] . $matches[3][$i], $content);
}
}
答案 1 :(得分:0)
一种方法是循环遍历要替换的数组中的每个元素;将myTag
替换为myDoneTag
或其他每个完成的内容,以便找到下一个。然后你总是可以在最后放回myTag
,你就有了你的字符串:
for(ii=0; ii<4; ii++) {
$content = preg_replace("/<myTag>.*<\/myTag>/s", "<myDoneTag>".$replace[ii]."<\/myDoneTag>", $content, 1);
}
$content = preg_replace("/myDoneTag/s", "myTag", $content);
答案 2 :(得分:0)
使用正则表达式,你可以这样:
$replaces = array('foo','bar','foz','bax');
$callback = function($match) use ($replaces) {
static $counter = 0;
$return = $replaces[$counter % count($replaces)];
$counter++;
return $return;
};
var_dump(preg_replace_callback('/a/',$callback, 'a a a a a '));
但实际上,在html或xml中搜索标签时,您需要一个解析器:
$html = '<!DOCTYPE html>
<html>
<head>
<title>test file</title>
</head>
<body>
<div id="dynamicContent">
<myTag>PART_ONE</myTag>
<myTag>PART_TWO </myTag>
<myTag> PART_THREE</myTag>
<myTag> PART_FOUR </myTag>
</div>
</body>
</html>';
$d = new DOMDocument();
$d->loadHTML($html);
$counter = 0;
foreach($d->getElementsByTagName('mytag') as $node){
$node->nodeValue = $replaces[$counter++ % count($replaces)];
}
echo $d->saveHTML();
答案 3 :(得分:-2)
这应该是您正在寻找的语法:
$patterns = array('/PART_ONE/', '/PART_TWO/', '/PART_THREE/', '/PART_FOUR/');
$replaces = array('part one', 'part two', 'part three', 'part four');
preg_replace($patterns, $replaces, $text);
但请注意,这些是按顺序运行的,因此如果&#39; PART_ONE`的文字包含文字&#39; PART_TWO&#39;随后将被替换。