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 に答える