3

我遇到了一些代码问题。

这是代码

$test ='<number>1<number>2</number>3</number>';

$i=0;
$find[$i]="#<number>(.*)</number>#is";
$replace[$i]="5";

$i++;
$find[$i]="#<number>(.*)</number>#is";
$replace[$i]="$1";


echo htmlentities(preg_replace($find, $replace, $test));

目前,这仅在结果中显示数字 5。但我希望它显示 153 有谁知道我做错了什么?谢谢

4

3 回答 3

4

是的,因为.*匹配所有内容(包括标签),你匹配的太多了。如果通过阻止正则表达式匹配尖括号来限制正则表达式不跨标签边界匹配,则会得到所需的结果:

$test ='<number>1<number>2</number>3</number>';

$i=0;
$find[$i]="%<number>([^<>]*)</number>%is";
$replace[$i]="5";

$i++;
$find[$i]="%<number>([^<>]*)</number>%is";
$replace[$i]="$1";
于 2012-06-27T12:55:05.743 回答
1

将第一个替换模式更改为:

$find[$i] = "#<number>\d+<number>(.*)</number>\d+</number>#is";
于 2012-06-27T12:54:11.123 回答
0
$s ='<number>1<number>2</number>3</number>'; 
echo preg_replace('#<number>(\d+)<number>\d+</number>(\d+)</number>#', "$1 5 $2", $s);

测试代码在这里

于 2012-06-27T13:08:19.280 回答