Регулярное выражение и разделенный camelCase

#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') }