Разбить строку на символы верхнего регистра? - PullRequest
13 голосов
/ 20 декабря 2011

Как я могу взорвать $param строку на $chunks кусочки на основе символов в верхнем регистре?

$string = 'setIfUnmodifiedSince';
$method = substr($string, 0, 3);
$param  = substr($string, 3);

// Split $param and implode with '-' separator
$chunks = splitAtUpperCase($param); // Chunks are: 'If', 'Unmodified' and 'Since'
$field  = implode('-', $chunks); // Get If-Unmodified-Since HTTP field name

Ответы [ 4 ]

35 голосов
/ 20 декабря 2011

Использование preg_split() на [A-Z] должно сделать:

function splitAtUpperCase($s) {
        return preg_split('/(?=[A-Z])/', $s, -1, PREG_SPLIT_NO_EMPTY);
}

EDIT
Если вам не нужен сам массив, вы можете просто предварительно прописать заглавные буквы (кроме первого) с дефисом (-):

preg_replace('/(?<!^)([A-Z])/', '-\\1', $param);

( демо )

5 голосов
/ 20 декабря 2011
$chunks = preg_split('/(?=[A-Z])/', $string);
1 голос
/ 08 января 2013
function splitAtUpperCase($string){
    return preg_replace('/([a-z0-9])?([A-Z])/','$1-$2',$string);
}

$string = 'setIfUnmodifiedSince';
echo splitAtUpperCase($string);
0 голосов
/ 11 февраля 2019

Если вы хотите преобразовать строку в регистр любовника, вы можете написать код @ jensgram, где я изменил дефис (-) на подчеркивание (_)

strtolower(preg_replace('/(?<!^)([A-Z])/', '_\\1', $param));

как я искал.

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