php preg_replace 忽略 [^abc] 构造中的 ^

php preg_replace ignores ^ in [ˆabc] construction

想法是从字符串中删除所有非字母符号。

$string = "abcd  5858add";
print preg_replace('/[ˆa-z]/', '', $string)."\n"; //produces '  5858' (wrong)
print preg_replace('/[a-z]/', '', $string)."\n";  //produces '  5858' (right)

第一个正则表达式应该删除所有非字母符号。 第二个应该删除所有字母符号。 但是两者的结果是一样的。 为什么?

测试于 PHP 5.5.30,PHP 5.4.16

那不是插入符号,那是抑扬音符。

使用 [^a-z] 而不是 [ˆa-z]