我需要一个正则表达式来计算字符串中的字符,这需要2次击键来创建字符。我开始很简单,只计算大写字符:
preg_match_all('/[A-Z]/', $string, $matches);
现在我也想找到抑郁的字符:â€û
在正则表达式中添加这些似乎不起作用,至少我收到一些奇怪的结果:
$string = 'Têst';
echo preg_match_all('/[A-Z]/', $string, $matches);
将回显“1”,这很好。
$string = 'Têst';
echo preg_match_all('/[A-Zê]/', $string, $treffer);
将回显“3”,这很奇怪。
答案 0 :(得分:2)
你必须使用u
modifier,否则“ê”被认为有2个字符(2个字节):
$string = 'Têst';
echo preg_match_all('/[A-Zê]/u', $string, $treffer); // 2
演示@ IDEOne.com。
答案 1 :(得分:0)
当我将'/[A-Zê]/'
与'Têst'
匹配时,我得到了2个结果。 (这是你所期望的)。我的源代码是用字符集UTF-8编码的,也许不同的字符集可能是你得到不同结果的原因。此外,您可以print_r($matches);
更好地了解匹配的内容。
这个例子对我很好:(IDE:netbeans,platform:windows,php version:5.3.4)
<?php
$string = 'Täst';
echo preg_match_all('/[A-Zâêîûôäëïöü]/', $string, $matches);
print_r($matches);
有趣的是,ideone还为第一次测试提供了3个结果,我不知道为什么。另外,调试非常困难,因为ideone由于某种原因没有正确输出var_dump或print_r ...... http://ideone.com/qqQyA