我有一段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,但结果仍然相同。
也许有人有答案?日Thnx。
答案 0 :(得分:2)
老实说,我不知道为什么会出错。它必须是某种bug。但是有一个简单的解决方案。
<?php
$B=preg_replace('/^[^\pL\s]*/','',$A);
这样它具有相同的功能,除了它有效并且开销较少。
更新:我在Java,regex coach和regexpal.com上做了一些测试,他们都正确地做了。所以这必须是preg_replace中的一个错误。