Взрыв UpperCasedCamelCase к верхнему Camel-регистру в корпусе в PHP

Прямо сейчас я реализую это с разделением, частью и имплозией:

$exploded = implode(' ',array_slice(preg_split('/(?=[A-Z])/','ThisIsATest'),1));
//$exploded = "This Is A Test"

Более симпатичная версия:

$capital_split = preg_split('/(?=[A-Z])/','ThisIsATest');
$blank_first_ignored = array_slice($capital_split,1);
$exploded = implode(' ',$blank_first_ignored);

Однако проблема состоит в том, когда Вы ввели как 'SometimesPDFFilesHappen', который моя реализация (неправильно) интерпретировала бы как 'Sometimes P D F Files Happen'.

Как я могу (просто) заставить свой сценарий уплотнять 'P D F' кому: 'PDF'?

Моя квалификация для того, когда это должно разделить, состояла бы в том, чтобы запуститься в первом капитале и закончить тот перед последним, для размещения следующего слова.

Да, я знаю, что существуют некоторые неоднозначности, как в 'ThisIsAPDFTest', который был бы интерпретирован как 'This Is APDF Test'. Однако я не могу думать об "умном" способе избежать этого, таким образом, это - приемлемый компромисс.

5
задан ThinkingStiff 30 June 2012 в 04:43
поделиться

1 ответ

$input = "SomePDFFile";

$pass1 = preg_replace("/([a-z])([A-Z])/","\\1 \\2",$input);
$pass2 = preg_replace("/([A-Z])([A-Z][a-z])/","\\1 \\2",$pass1);
echo $pass2;

или, если вы очень религиозны по поводу одного утверждения:

preg_replace("/(([a-z])([A-Z])|([A-Z])([A-Z][a-z]))/","\\2\\4 \\3\\5",$input);

, что очень некрасиво.

10
ответ дан 13 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

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