Php 预匹配不是';t匹配重音字符

Php 预匹配不是';t匹配重音字符,php,regex,Php,Regex,下面是一个简单的测试程序: <?php $n = "Baden-Württemberg"; preg_match ("/(.*)([^[:print:]])(.*)/", $n, $m); print_r ($m); ?> 我还尝试了/(.*)([^\p{L}\p{M}*\s'-\.])(.*/和/(.*)([^[:print:]])(.*)/u但是得到了相同的结果,除了/u给出了$M[2]='u'而不是� 如何匹配重音字符?在我的情况下不起作用。我不太确定你在这里想要实现什么 p

下面是一个简单的测试程序:

<?php
$n = "Baden-Württemberg";
preg_match ("/(.*)([^[:print:]])(.*)/", $n, $m);
print_r ($m);
?>
我还尝试了
/(.*)([^\p{L}\p{M}*\s'-\.])(.*/
/(.*)([^[:print:]])(.*)/u
但是得到了相同的结果,除了
/u
给出了
$M[2]='u'
而不是


如何匹配重音字符?在我的情况下不起作用。

我不太确定你在这里想要实现什么

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

我不太清楚你想在这里实现什么

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

您应该更恰当地命名变量。如果你开始煮字母汤,你以后肯定会过得不好
$string
$matches
同样有效。您正在运行什么操作系统?Ubuntu与5.3.15/
LC_CTYPE=UTF-8
似乎匹配正确。。。那么你想匹配什么呢?另外,您最后一个使用
/u
的示例在使用PHP5.3.8的Windows7上运行良好。没有
/u
就像你后来说的那样。。。第一个问号消失了,第二个问号变成了
ü
。您应该更恰当地命名变量。如果你开始煮字母汤,你以后肯定会过得不好
$string
$matches
同样有效。您正在运行什么操作系统?Ubuntu与5.3.15/
LC_CTYPE=UTF-8
似乎匹配正确。。。那么你想匹配什么呢?另外,您最后一个使用
/u
的示例在使用PHP5.3.8的Windows7上运行良好。没有
/u
就像你后来说的那样。。。第一个问号消失了,第二个问号变成了
ü