使用php替换位置中的文本片段

使用php替换位置中的文本片段,php,replace,preg-replace,str-replace,Php,Replace,Preg Replace,Str Replace,我需要用php替换文本文件中的字符串。我有样本内容: [prev title=“sample1”cont=“sample1a”res=“sample1b”mw=“1”][prev title=“sample2”cont=“sample2a”res=“sample2b”mw=“2”][prev title=“sample3”cont=“sample3a”res=“sample3b”mw=“3” 我需要移动每个片段'cont=“sample”res=“sample”'并在[prev title=]之

我需要用php替换文本文件中的字符串。我有样本内容:

[prev title=“sample1”cont=“sample1a”res=“sample1b”mw=“1”][prev title=“sample2”cont=“sample2a”res=“sample2b”mw=“2”][prev title=“sample3”cont=“sample3a”res=“sample3b”mw=“3”

我需要移动每个片段'cont=“sample”res=“sample”'并在[prev title=]之间插入,以获得结果:

[prev cont=“sample1a”res=“sample1b”title=“sample1”mw=“1”]等

我试着替换一些东西,但不是很多

$getCont = file_get_contents($file);
$delText = trim(preg_replace('/prev.*?cont/', '/prev res.*? mw/', $getCont));
file_put_contents($file, $delText);

我已经知道这不是办法。您能帮忙吗?

这里有一个选项,使用
preg\u replace

$input = "[prev title=\"sample1\" cont=\"sample1a\" res=\"sample1b\" mw=\"1\"][prev title=\"sample2\" cont=\"sample2a\" res=\"sample2b\" mw=\"2\"][prev title=\"sample3\" cont=\"sample3a\" res=\"sample3b\" mw=\"3\"]";
echo $input;
$output = preg_replace('/(title=\"[^"]+\") (cont=\"[^"]+\") (res=\"[^"]+\")/', "$2 $3 $1", $input);
echo "\n" . $output;

[prev cont="sample1a" res="sample1b" title="sample1" mw="1"]
[prev cont="sample2a" res="sample2b" title="sample2" mw="2"]
[prev cont="sample3a" res="sample3b" title="sample3" mw="3"]

我们匹配并捕获括号内条目的前三项,然后按照您想要的顺序形成替换项。

您可以使用正向查找和两个捕获组,并替换为组2和组1:


(?你可以用很多方法来做,例如使用正则表达式在爆炸后重新排列字符串,等等。我的一种非正则表达式方法

<?php
$str = '[prev title="sample1" cont="sample1a" res="sample1b" mw="1"][prev title="sample2" cont="sample2a" res="sample2b" mw="2"][prev title="sample3" cont="sample3a" res="sample3b" mw="3"]';
$arr = explode('][',$str);
$expected = '';
foreach($arr as $row){
    $res = explode(' ',trim($row,'[]'));
    $expected.= '['.$res[0].' '. $res[2].' '.$res[3].' '.$res[1].' '.$res[4].']';
}
echo $expected;
?>

演示:

不清楚您的预期输出,是否要从每个片段重新排序
title=“sample1”
?是一个简短的演示,不在生产中使用或运行。
[prev cont="sample1a" res="sample1b" title="sample1" mw="1"]
[prev cont="sample2a" res="sample2b" title="sample2" mw="2"]
[prev cont="sample3a" res="sample3b" title="sample3" mw="3"]