#regex #split #preg-match-all #camelcasing
#регулярное выражение #разделить #preg-сопоставить все #camelcasing
Вопрос:
Я хочу получить массив всех слов с заглавными буквами, которые включены в строку. Но только если строка начинается с «set».
Например:
- string "setUserId", result array("User", "Id")
- string "getUserId", result false
Без ограничений «set» Регулярное выражение выглядит как /([A-Z][a-z] )/
Комментарии:
1. Я думаю, вы не можете сделать это с совпадением, потому что PCRE не поддерживает повторение переменных в lookbehinds. Вместо этого используйте решение @codaddict.
Ответ №1:
$str ='setUserId';
$rep_str = preg_replace('/^set/','',$str);
if($str != $rep_str) {
$array = preg_split('/(?<=[a-z])(?=[A-Z])/',$rep_str);
var_dump($array);
}
Также ваше регулярное выражение также будет работать.:
$str = 'setUserId';
if(preg_match('/^set/',$str) amp;amp; preg_match_all('/([A-Z][a-z]*)/',$str,$match)) {
var_dump($match[1]);
}
Комментарии:
1. Очень приятно 1! Возможно ли это без замены / разделения, т. Е. с совпадением?
2. Двойное регулярное выражение. Неплохо. Спасибо! К сожалению, я не могу дать 2 😀
3. Я надеялся, что эта операция может быть выполнена одним регулярным выражением.
4. В этом случае моя версия:
$name = 'setUserId'; preg_match_all('/(?:^|[A-Z])[a-z] /', $name, $matches); $data = $matches[0]; $prefix = array_shift($data); if ($prefix == 'set') { // work with $data containing array('User', 'Id') }