Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_更换不在回路内工作_Php_Regex_Rss_Preg Replace - Fatal编程技术网

Php preg_更换不在回路内工作

Php preg_更换不在回路内工作,php,regex,rss,preg-replace,Php,Regex,Rss,Preg Replace,我正在解析一个RSS提要,我正在尝试删除其中一个项目的特定位,以便它不会显示 <pre>M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q1.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q10.htm M /WITHHELD/WITHHELD/dist/gameserver/

我正在解析一个RSS提要,我正在尝试删除其中一个项目的特定位,以便它不会显示

<pre>M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q1.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q10.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q11.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q12.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q13.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q14.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q15.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q2.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q3.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q4.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q5.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q6.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q7.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q8.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q9.htm M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_128_PailakaSongofIceandFire.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_129_PailakaDevilsLegacy.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_144_PailakaInjuredDragon.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_311_ExpulsionOfEvilSpirits.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_312_TakeAdvantageOfTheCrisis.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_642_APowerfulPrimevalCreature.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_643_RiseAndFallOfTheElrokiTribe.java M /WITHHELD/WITHHELD/dist/gameserver/data/stats/items/15400-15499.xml M /WITHHELD/WITHHELD/dist/gameserver/data/stats/items/700-799.xml M /WITHHELD/WITHHELD/dist/gameserver/data/stats/npc/22600-22699.xml</pre>
当我有一个字符串,其中包含我想作为静态变量删除的位时,确实起作用,但当我尝试在RSS输出循环中替换它时,它不起作用:

foreach($rs['items'] as &$item) //Pass by reference using "&"
{
 $arr = array($i);
 $a = array_fill_keys($arr, (string)$item['description']);
 $desc = (string)$a[$i];
 $desc = preg_replace("/(<pre>.*<\/pre>)/", "", $desc);

 $htm .= "\t<li><a href=\"$item[link]\">(".$i.")".$item['title']."</a><br />";
 $htm .= replace($desc);
 $htm .= "</li>\n";
 $i++;
 $item['description'] = $desc; //Add this
}
$i=1;
foreach($rs['items']作为和$item){
$arr=数组($i);
$a=数组填充键($arr,(string)$item['description']);
$desc=(字符串)$a[$i];
$desc=preg_replace(“/(.*)/”,“”,$desc);
回声“\t

  • ”; echo$desc; 回声“
  • \n”; $i++; }
    通过上面写得很糟糕的代码,您可能会知道我完全不知所措,并且已经尝试了许多方法来实现这一点

    说明($desc)节点保持不变,即使我尝试将整个输出保存为变量($htm),然后运行preg\u replace

    有什么想法吗


    提前谢谢。

    要保存更改,您必须通过引用将其作为&$item传递,而不是像这样使用$item

    foreach($rs['items']as&$item)//使用“&”通过引用传递
    {
    $arr=数组($i);
    $a=数组填充键($arr,(string)$item['description']);
    $desc=(字符串)$a[$i];
    $desc=preg_replace(“/(.*)/”,“”,$desc);
    $htm.=“\t

  • ”; $htm.=替换($desc); $htm.=“
  • \n”; $i++; $item['description']=$desc;//添加此项 }
    这应该行得通。让我知道它是否仍然没有

    编辑:
    只需添加$item['description']=$desc在循环的最后,如上所述。

    请不要使用正则表达式来解析HTML,而是使用DOM解析器。如果启用
    s
    flag
    /(.*)/s
    ?@Toto我试图将整个解析的字符串保存为变量,然后用DOM对其进行解析,但也不起作用。@revo只是尝试了一下,运气不好。:(感谢您的回答!不幸的是,这并没有解决问题。@Kalinia-这又是因为您必须使用“按引用传递”。您必须添加“&”在foreach循环中添加变量$a和$desc,比如&$a和&$desc。你能给我$rs的示例值吗?我是在变量定义的地方添加“&”还是在代码中添加“&”?-$rs本质上是我正在使用的RSS解析器库中的“Get”函数。可以在这里查看它:@Kalinia-Nevermind,最后保存它。我更新了它在我的帖子中,上面的代码是e。这应该行得通(Y)恐怕还是没什么:(
        $i = 1;
    
        foreach($rs['items'] as &$item) {
        $arr = array($i);
        $a = array_fill_keys($arr, (string)$item['description']);
        $desc = (string)$a[$i];
        $desc = preg_replace("/(<pre>.*<\/pre>)/", "", $desc);
    
        echo "\t<li><a href=\"$item[link]\">(".$i.")".$item['title']."</a><br />";
        echo $desc;
        echo "</li>\n";
        $i++;
        }
    
    foreach($rs['items'] as &$item) //Pass by reference using "&"
    {
     $arr = array($i);
     $a = array_fill_keys($arr, (string)$item['description']);
     $desc = (string)$a[$i];
     $desc = preg_replace("/(<pre>.*<\/pre>)/", "", $desc);
    
     $htm .= "\t<li><a href=\"$item[link]\">(".$i.")".$item['title']."</a><br />";
     $htm .= replace($desc);
     $htm .= "</li>\n";
     $i++;
     $item['description'] = $desc; //Add this
    }