preg_replace不按我需要的方式工作


preg_replace not working the way I need it to

下面的代码没有按照我需要的方式工作:

$homepage = file_get_contents('www.site.com'); 
$var1= preg_replace('#ProdSupp'*(.*?)'*ProdSupp#siu', '$1', $homepage); 

当它的文件内容的网站,它确实找到里面的东西ProdSupp* *ProdSupp,但var1存储整个内容后,它获取字符串寻找....我怎样才能消除var1中的一切,只让它存储ProdSupp* *ProdSupp之间的东西?

我不知道如何消除垃圾文本,只存储ProdSupp* *ProdSupp之间的值。什么好主意吗?

"My Regex Tester"(不是我的,只是它的名字)是调试此类内容的方便工具。如果我读到你想正确做的事情,似乎你应该实际使用preg_match_all()而不是preg_replace()

<?php
$sourcestring = "ProdSupp*baz 12345 foo bar*ProdSupp";
preg_match_all('/ProdSupp'*(.*?)'*ProdSupp/ims', $sourcestring, $matches);
echo "<pre>".print_r($matches,true)."</pre>";
?>
$matches Array:
(
    [0] => Array
        (
            [0] => ProdSupp*baz 12345 foo bar*ProdSupp
        )
    [1] => Array
        (
            [0] => baz 12345 foo bar
        )
)

所以当一切都说了,做了,你要找的内容是在$matches[1][0] .

如前所述,如果我对您的问题理解正确,您可能应该使用某种preg_match函数。

如果你想替换和匹配,你可以使用preg_replace_callback全局变量,像这样:

<?php
global $var1;
$var1= array();
global $index;
$index=0;

$callbackFunction = create_function('$matches',  
   ' 
     global $var1;
     global $index; 
     $var1[$index]=$matches[1];
     $index++;
     return $matches[1]; 
   ');
   $var11= preg_replace_callback('#ProdSupp'*(.*?)'*ProdSupp#siu', $callbackFunction, $homepage); 
?>

在$var1数组将是您的匹配括号内和$var11的整个修改的内容。