2011-11-09 5 views
4

Je veux obtenir un tableau de tous les mots avec des majuscules qui sont inclus dans la chaîne. Mais seulement si la ligne commence par "set".RegEx et split camelCase

Par exemple:

- string "setUserId", result array("User", "Id") 
- string "getUserId", result false 

Sans limitation à propos de "set" RegEx ressemblent /([A-Z][a-z]+)/

+1

Vous ne pouvez pas le faire avec une correspondance, car je pense que PCRE ne prend pas en charge la répétition des variables dans lookbehinds. Au lieu de cela, utilisez la solution @codaddict. – FailedDev

+0

Modifier: avec une seule regex. – FailedDev

Répondre

4
$str ='setUserId';       
$rep_str = preg_replace('/^set/','',$str); 
if($str != $rep_str) { 
     $array = preg_split('/(?<=[a-z])(?=[A-Z])/',$rep_str); 
     var_dump($array); 
} 

See it

également votre regex travaillera également .:

$str = 'setUserId'; 
if(preg_match('/^set/',$str) && preg_match_all('/([A-Z][a-z]*)/',$str,$match)) { 
     var_dump($match[1]);              
} 

See it

+0

Très bien + 1! Est-ce possible sans remplacer/split c'est-à-dire avec match? – FailedDev

+0

@FailedDev: Très possible. J'ai mis à jour ma réponse. – codaddict

+0

Une regex jumelle. Agréable. Merci! Je ne peux malheureusement pas donner +2: D – FailedDev