0

我有一个 PHP 片段,它替换了左边所有不是 Unicode 字母的字符。它工作正常,有一个例外,我不知道为什么。任何人都可以帮忙吗?

<?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"了一个空字符串正确地
"^&\\\@@\8016.8148067"给出"16.8148067"
"^&\\\@@\8116.8148167"了再次是空的
它似乎与零和点有关,但我找不到模式也找不到解决方案。我尝试添加 strval,但结果仍然相同。也许有人有答案?谢谢。

4

1 回答 1

2

老实说,我不知道为什么会出错。它必须是某种错误。但是有一个简单的解决方案。

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

这样,它具有相同的功能,除了它可以工作并且开销要少得多。

更新:我用 Java、regex coach 和 regexpal.com 做了一些测试,他们都做对了。所以这必须是 preg_replace 中的一个错误。

于 2013-05-06T13:36:57.247 回答