下面的代码没有按照我需要的方式工作:
$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的整个修改的内容。