Preg_match для подсчета символов в верхнем и нижнем регистре - PullRequest
3 голосов
/ 11 ноября 2011

Мне нужно регулярное выражение для подсчета символов в строке, для создания которой требуется 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 ]

2 голосов
/ 11 ноября 2011

Вы должны использовать модификатор u , в противном случае "ê" считается имеющим 2 символа (2 байта):

$string = 'Têst';
echo preg_match_all('/[A-Zê]/u', $string, $treffer); // 2

Demo @ IDEOne.ком .

0 голосов
/ 11 ноября 2011

Когда я сопоставил '/[A-Zê]/' с 'Têst', я получил 2 результата.(это то, что вы ожидаете).Мой исходный код кодируется набором символов UTF-8, возможно, другой набор символов может быть причиной того, что у вас другой результат.Кроме того, вы можете print_r($matches);, чтобы иметь лучшее представление о том, что сопоставляется.

Этот пример отлично сработал для меня: (IDE: netbeans, платформа: windows, версия php: 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

...