Как я могу добавить пробел в строку заглавными буквами, но сохранить непрерывные заглавные буквы вместе, используя PHP и Regex? - PullRequest
13 голосов
/ 23 декабря 2011

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

Эти строки являются примерами:

TodayILiveInTheUSAWithSimon
USAToday
IAmSOOOBored

стать:

 Today I Live In The USA With Simon
 USA Today
 I Am SOOO Bored

Можно ли это сделать и как?

Этот вопрос ( Регулярное выражение, разделенное строкой по заглавной букве, но игнорирующее TLA ), кажется, достигает этого с помощью .net.

РАБОЧЕЕ РЕШЕНИЕ

Вот полный код, который я использую:

$string = 'TodayILiveInTheUSAWithSimon';
$regex = '/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/';
$string = preg_replace( $regex, ' $1', $string );

Обе работы этих регулярных выражений:

/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/
/((?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z]))/

Первый из приведенного ниже решения @ Regexident, и он очень и очень немного быстрее второго.

1 Ответ

11 голосов
/ 23 декабря 2011

Найти:

(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))

Заменить:

 $1

отметить пробел перед $1

Редактировать: исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...