这是一个简单的测试程序:
<?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在我的案例中没有奏效。
答案 0 :(得分:0)
我不太确定你想在这里实现什么。
preg_match('/[[:^print:]]/u', '$n, $m);
准确匹配重音字符(您可以使用[[:^print:]]
以及[^[:print:]]
,这会产生相同的结果。)
如果在模式中使用(.*)
,使用U
修饰符(ungreedy)通常很有用。在您的第一个示例中,这将得到以下结果:
$n = "Baden-Württemberg";
preg_match ("/(.*)([^[:print:]])(.*)/uU", $n, $m);
print_r ($m);
Array
(
[0] => Baden-Wü
[1] => Baden-W
[2] => ü
[3] =>
)