Bonjour,
Le 26/02/2020 19:12, Otomatic a écrit :
>
> Soit un chaîne de caractères, nommée $Texte, composée de plusieurs
> lignes, par exemple :
>
> BigKey0=$w_apacheModules,30,1
> BigKey1=Africa,26,$AfricaSep
> BigKey2=$America,38,$AmericaSep
> BigKey3=Asia,$AsiaNbCol,1
> BigKey4=Europe,30,1
> BigKey5=$India,$IndiaNbCol,$IndiaSep
>
> Chaque ligne peut comporter ou non des noms de variables PHP, qui donc
> commencent par un $.
>
> Je cherche à récupérer uniquement les noms desdites variables.
>
> Ma regex actuelle est :
>
> preg_match_all('~(\$[a-zA-Z0-9_]+).*~m',$Texte,$matches);
>
> Mais je ne récupère que la première variable de chaque ligne :
C'est à cause du « .* » qui consomme toute la fin de la ligne lorsque
tu as trouvé une occurrence.
D'ailleurs :
> [26-Feb-2020 19:08:25 Europe/Paris] matches=Array
> (
> [0] => Array
> (
> [0] => $w_apacheModules,30,1
> [1] => $AfricaSep
> [2] => $America,38,$AmericaSep
> [3] => $AsiaNbCol,1
> [4] => $India,$IndiaNbCol,$IndiaSep
> )
Regarde par exemple l'élément [0][2] : "$America,38,$AmericaSep" correspond
à la recherche (sans les parenthèses de capture) \$[a-zA-Z0-9_]+.* sur la
ligne "BigKey2=$America,38,$AmericaSep".
C'est-à-dire que tu n'as pas le début "BigKey2=" parce que ta recherche
commence au signe $, mais tu as la fin ",38,$AmericaSep" du fait du .*
> [1] => Array
> (
> [0] => $w_apacheModules
> [1] => $AfricaSep
> [2] => $America
> [3] => $AsiaNbCol
> [4] => $India
> )
Ici en revanche les parenthèses de capture ne récupèrent que "$America"
dans "$America,38,$AmericaSep".
J'ai donc deux conseils :
1) Supprime « .* » et tu auras les mêmes résultats dans $matches[0] et
$matches[1], avec toutes les variables sans exception.
2) Supprime aussi les parenthèses, et tu n'auras plus que $matches[0]
et pas de $matches[1], mais avec toutes les valeurs que tu souhaites.
preg_match_all('~\$[a-zA-Z0-9_]+~m',$Texte,$matches);
Cordialement,
--
Olivier Miakinen