0

左からのすべての文字をUnicode文字ではないものに置き換えるPHPのスニペットがあります。1 つの例外を除いて、問題なく動作しますが、その理由がわかりません。誰でも助けることができますか?

<?php
$B=$A;
do{
    $A=$B;
    $B=preg_replace('/^[^\pL\s]/','',$B);
    }
while($B!=$A);
echo $B;
?>

糸みたいに餌をやる"\\*^&\\\@@\816.80831téstmé"と綺麗に吐き出し"téstmé"ます。
$A="*^&\\\@@\816.80831[+"空の文字列を返します。これも正しいです。
しかし、 を入力する"\\*^&\\\@@\816.80831""831"、実際には空の文字列である必要があるのに、 になります。

"^&\\\@@\8016.8048.31"ゼロとドットに関係があるようですが、パターンも解決"48.31"
"^&\\\@@\8016.8148.31"策 も見つかりません。strval を追加しようとしましたが、それでも同じ結果です。多分誰かが答えを持っていますか?サンクス。
"^&\\\@@\8016.8148067""16.8148067"
"^&\\\@@\8116.8148167"

4

1 に答える 1

2

正直なところ、なぜこれがうまくいかないのかわかりません。それはある種のバグでなければなりません。ただし、簡単な解決策があります。

<?php
$B=preg_replace('/^[^\pL\s]*/','',$A);

このようにして、機能し、オーバーヘッドが大幅に少なくなることを除いて、同じ機能を持ちます。

更新: Java、正規表現コーチ、および regexpal.com でいくつかのテストを行いましたが、すべて正しく実行されています。したがって、これは preg_replace のバグに違いありません。

于 2013-05-06T13:36:57.247 に答える