preg_replace没有按照我需要的方式工作

时间:2011-11-07 16:41:33

标签: php search preg-replace file-get-contents

以下方法无法正常工作:

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

当它在文件内容中找到内容时它会找到ProdSupp* *ProdSupp内的内容,但是var1在获取它寻找的字符串之后存储ENTIRE内容....我怎样才能消除var1中的所有内容而只能使它成为现实将内容存储在ProdSupp* *ProdSupp之间?

我不知道如何消除垃圾文本,只将值存储在ProdSupp* *ProdSupp之间。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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]

答案 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中为整个修改后的内容。