Preg_match用于计算大写和回旋字符

时间:2011-11-11 16:28:03

标签: php regex preg-match

我需要一个正则表达式来计算字符串中的字符,这需要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”,这很奇怪。

2 个答案:

答案 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