preg_match不匹配重音字符

时间:2012-10-02 17:07:52

标签: php regex

这是一个简单的测试程序:

<?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在我的案例中没有奏效。

1 个答案:

答案 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] => 
)