我需要用php来计算所有德语字符串中的字符。
我试着这样:
$pattern = '/[äüöÄÜÖß]/';
$address = "Knnöstraße";
$counting = 0;
if(preg_match($pattern, $address )) {
$counting ++;
}
echo $counting;
但它只返回我1.计算特殊字符的最佳方法是什么?
使用preg_all_match函数,它返回4,但必须是2:
preg_match_all($pattern, $address, $matches, PREG_SET_ORDER);
echo count($matches);
答案 0 :(得分:1)
如果没有特殊的德语字符,您可以计算原始字符串和字符串之间的差异,如下所示:
echo (mb_strlen($address, 'UTF-8') - strlen(str_replace(['ä', 'ü', 'ö', 'Ä', 'Ü', 'Ö', 'ß'], '', $address))); //2
答案 1 :(得分:1)
您需要使用/ u修饰符,这样模式和主题将被视为UTF-8。这给出了正确的结果:
$pattern = '/[äüöÄÜÖß]/u';
$address = "Knnöstraße";
preg_match_all($pattern, $address, $matches, PREG_SET_ORDER);
echo sizeof($matches);
按预期输出2。
答案 2 :(得分:0)
如果模式与给定主题匹配,则preg_match()返回1,否则返回0;如果发生错误,则返回FALSE。
在你的例子中,你只是检查我们是否至少在角色上。
我建议使用以下代码来解决您的问题:
$pattern = '/[äüöÄÜÖß]/u';
$address = "Knnöstraße";
$counting = preg_match($pattern, $address );
if($counting === false) {
throw new \Exception('Regexp error');
}
echo $counting;
BTW您应该使用“u”修饰符将preg匹配切换为Unicode模式。你错过了这个标志,这就是为什么你得到4而不是2