Здравствуйте. Помогите, пожалуйста, разобраться со следующим вопросом. Необходимо выбрать элементы из массива (PHP), значения которых начинается с прописной буквы (кириллицы). Запись '/^[А-Я].+/' не работает. Можно ли это обойти? Заранее, спасибо.
кодировка какая? Добавлено спустя 2 минуты: и вообще, ты проверял свой алгоритм "выбора регуляркой из массива" на примерах, кроме прописной кириллицы?
Кодировка UTF8. Программа работает, но по коду '/^[А-Я]/' выбирает элемент массива значение, которого начинается и с прописной и со строчной. Код '/^[A-Z]/' для латинского шрифта работает корректно. Добавлено спустя 14 минут 18 секунд: Спасибо за подсказку по поводу кодировки. Считал, что у меня кодировка UTF8, но после проверки, оказалось, что это не так. Когда перекодировал в UTF8 все стало работать корректно. Еще раз, спасибо.
Добрый день. Решал аналогичную задачу пол года назад. Подозреваю, что кодировка здесь не причем. Когда занимался этим, перебрал все варианты кодировки. При использовании кириллицы прописные и строчные мне не удалось разделить.
Ganzal. флаг i я не использовал и у меня, также как и у Valery_2014, работала фильтрация строковых символов с латинским алфавитом, а вот с кириллицей не хотело работать.
Задача у меня была такая: должность отделить от фамилии. Пример: $a = ‘бухгалтер, Иванов' ; , $b = ‘Петров, директор ’; Надо автоматически разобрать эти записи. 1. $str = preg_split('/,/', $a); // Разделяем содержимое переменной на две части по запятой. 2. а затем, в цикле анализируя на наличие первой прописной буквы в каждом элементе массива. if (preg_match('/^[А-Я]/' , $str[0])) {$c[0] = $str[0] ;} записываем в другой массив отобранные значения.
регулярка рабочая. видимо ошибка была в чем-то другом. Добавлено спустя 39 минут 46 секунд: наверное работал с UTF-8, а модификатор уникода "u" забыл прописать. я побаловался с твоим случаем. не знал чего делать с фактом обнаружения фамилии - сделал сортировку чтобы фамилия выходила вперед http://phpfiddle.org/lite/code/abng-6fir Код (PHP): $ss = array_map('trim', explode(',', $line)); usort( $ss, function($s1, $s2) { return preg_match('/^[А-Я]/u', $s2); // 1 если фамилия, иначе 0 } ); $line = implode(', ', $ss); P.S. Можно такую регулярку для Уникода сделать: '/^\\p{Lu}/u' тогда и кириллица и латиница в верхнем регистре попадает. См. ништяки PCRE для Уникода P.P.S. Для windows-1251 вроде так корректней: '/^[А-ЯЁ]/' буква йо у нас особенная!
Спасибо, artoodetoo. Все дело в модификаторе u. При использовании кодировки UTF8 (без этого модификатора) фильтр не отличает прописные и строчные в кириллице.