【发布时间】:2012-10-02 17:07:51
【问题描述】:
这是一个简单的测试程序:
<?php
$n = "Baden-Württemberg";
preg_match ("/(.*)([^[:print:]])(.*)/", $n, $m);
print_r ($m);
?>
我预计这与 [^[:print:]] 不匹配,但输出是这样的:
Array
(
[0] => Baden-Württemberg
[1] => Baden-W�
[2] => �
[3] => rttemberg
)
我也尝试了/(.*)([^\p{L}\p{M}*\s'-\.])(.*)/ 和/(.*)([^[:print:]])(.*)/u,但得到了相同的结果,除了/u 给出$m[2]='ü' 而不是�
如何匹配重音字符? This answer 在我的情况下不起作用。
【问题讨论】:
-
你应该更恰当地命名你的变量。如果你开始煮字母汤,你以后肯定会过得很糟糕。
$string和$matches也同样有效。 -
你运行的是什么操作系统?带有 5.3.15 /
LC_CTYPE=UTF-8的 Ubuntu 似乎匹配正确。 -
Ummm...那么您想要匹配的做什么?最后一个带有
/u的示例也适用于我在带有PHP 5.3.8 的Windows 7 上。没有/u,就像你后面说的那样……第一个问号消失了,第二个变成了ü。