Вопрос по regex, preg-replace-callback, php – Использование регулярных выражений с preg_replace_callback

1

Я хотел бы использовать заглавную букву первой буквы строки, которая могла бы иметь особые символы (вот почему ucfirst здесь недопустим). У меня есть следующий код:

$string = 'ésta';
$pattern = '/^([^a-z]*)([a-z])/i';

$callback_fn = 'process';

echo preg_replace_callback($pattern, $callback_fn, $string);


function process($matches){
    return $matches[1].strtoupper($matches[2]);
}

который возвращает '& # xE9; Sta' apos; но '& # xC9; sta & apos; ожидалось ... Я думаю, что моя проблема в том, какой шаблон я использую, но я сделал разные комбинации (например,$pattern = '/\pL/u') но я не нахожу хорошего регулярного выражения. Может ли кто-нибудь помочь мне? Спасибо!

Ваш Ответ

1   ответ
2

a-z не будет соответствовать & # xE9 ;. Написание регулярного выражения для включения символов Юникода может быть затруднено.

Из вашего кода он будет использовать только первую букву, независимо от количества слов в вашей строке. Если это так, просто сделайте это:

$string = 'ésta';
$ucstring = ucphrase($string);

function ucphrase($word) {
  return mb_strtoupper(mb_substr($word, 0, 1)) . mb_substr($word, 1);
}

mb_* функции должны правильно обрабатывать ваши специальные символы.

Исходя из вашего комментария ниже, я понимаю вашу дилемму. В этом случае вы можете использовать свое регулярное выражение, но с правильными селекторами Юникода

$string = 'ésta';
$pattern = '/(\p{L})(.+)/iu';

$callback_fn = 'process';

echo preg_replace_callback($pattern, $callback_fn, $string);


function process($matches){
    return mb_strtoupper($matches[1], 'UTF-8') . $matches[2];
}
Большое большое спасибо!! ;) jprog
Код выше будет работать для¿"ésta а такжеésta
Моя проблема заключается в том, что это не всегда первая буква, которую я должен использовать с заглавной буквы, потому что моя строка может быть чем-то вроде "& # xBF;" & quot; & quot;? " и я хочу, чтобы моя функция возвращала "& # xBF;" & quot; sta & quot;? " jprog

Похожие вопросы