preg_replace для превращения в капитал буквы после кавычки

У меня есть имена как это:

$str = 'JAMES "JIMMY" SMITH'

Я работаю strtolower, затем ucwords, который возвращает это:

$proper_str = 'James "jimmy" Smith'

Я хотел бы использовать для своей выгоды вторую букву слов, в которых первая буква является двойной кавычкой. Вот regexp. Кажется, что strtoupper не работает - regexp просто возвращает неизменное исходное выражение.

$proper_str = preg_replace('/"([a-z])/',strtoupper('$1'),$proper_str);

Какие-либо подсказки?Спасибо!!

18
задан Summer 14 April 2010 в 14:42
поделиться

3 ответа

Используйте модификатор e , чтобы вычислить замену:

preg_replace('/"[a-z]/e', 'strtoupper("$0")', $proper_str)

Где $ 0 содержит совпадение всего шаблона, поэтому " и строчная буква. Но это не имеет значения, поскольку " не изменяется при отправке через strtoupper .

20
ответ дан 30 November 2019 в 05:43
поделиться

Вероятно, лучший способ сделать это - использовать 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 () , но я обычно не советую этого делать. Это потенциально чрезвычайно опасно, особенно при работе с внешним входом.

35
ответ дан 30 November 2019 в 05:43
поделиться

Что-то вроде этого может сработать:

preg_replace("/(\w+)/e", "ucwords(strtolower('$1'))", $proper_str);
0
ответ дан 30 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

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