У меня есть имена как это:
$str = 'JAMES "JIMMY" SMITH'
Я работаю strtolower
, затем ucwords
, который возвращает это:
$proper_str = 'James "jimmy" Smith'
Я хотел бы использовать для своей выгоды вторую букву слов, в которых первая буква является двойной кавычкой. Вот regexp. Кажется, что strtoupper не работает - regexp просто возвращает неизменное исходное выражение.
$proper_str = preg_replace('/"([a-z])/',strtoupper('$1'),$proper_str);
Какие-либо подсказки?Спасибо!!
Используйте модификатор e , чтобы вычислить замену:
preg_replace('/"[a-z]/e', 'strtoupper("$0")', $proper_str)
Где $ 0
содержит совпадение всего шаблона, поэтому "
и строчная буква. Но это не имеет значения, поскольку "
не изменяется при отправке через strtoupper
.
Вероятно, лучший способ сделать это - использовать preg_replace_callback ()
:
$str = 'JAMES "JIMMY" SMITH';
echo preg_replace_callback('!\b[a-z]!', 'upper', strtolower($str));
function upper($matches) {
return strtoupper($matches[0]);
}
Вы можете использовать e
(eval) в preg_replace ()
, но я обычно не советую этого делать. Это потенциально чрезвычайно опасно, особенно при работе с внешним входом.
Что-то вроде этого может сработать:
preg_replace("/(\w+)/e", "ucwords(strtolower('$1'))", $proper_str);