我有以下代码: 此代码查找字符串中的所有html标记,并用[[0]],[[1]],[[2]]等替换它们。(至少这是有意的但不是workinng);
$str = "some text <a href='/review/'>review</a> here <a class='abc' href='/about/'>link2</a> hahaha";
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$str, $out, PREG_OFFSET_CAPTURE);
$count = 0;
foreach($out[0] as $result) {
$temp=preg_quote($result[0],'/');
$temp ="/".$temp."/";
preg_replace($temp, "[[".$count."]]", $str,1);
$count++;
}
var_dump($str);
此代码查找字符串中的所有标记,并用[[0]],[[1]]和[[2]]等替换它们。我已将preg_match_all
与PREG_OFFSET_CAPTURE一起使用。
preg_match_all
的输出符合预期。但是,在使用preg_replace
替换代码时,substr_replace
,str_replace
和[[$count]]
不起作用。
我已经尝试了所有三种字符串替换方法,但没有一种方法可行。请指出我正确的方向。
php.ini中的内容可以导致这个吗?
提前谢谢。
答案 0 :(得分:2)
preg_replace
不能替代$str
。再次将其分配给字符串:
$str = preg_replace($temp, "[[".$count."]]", $str);
另外,我不确定你想要什么,但是我改变了code中的一些东西,这似乎是你想要做的事情。我稍微更改了正则表达式,尤其是(.*?)
部分更改为([^<>]+)
。
答案 1 :(得分:0)
问题可能出在这一行
foreach($out[0] as $result) {
将其更改为此
foreach($out as $result) {
因为我认为你正在访问一个不存在的索引