8797 sujets

Développement web côté serveur, CMS

Bonjour à tous. Smiley smile

Un de mes scripts PHP possède une chaîne (certes étrange, mais modifiées pour rendre l'exemple simple) de ce type :
$var = '(AAA[family_tax])test(AAA[family_tax_1])test(AAA[family_tax_2])';

Je souhaiterais extraire toutes les données qui sont entre crochet. Autrement dit, créer une regex qui détecte toute les données commençant par "(AAA[" et se terminant par "])". Si possible, sous forme de tableau et tout en gardant les autres données (ici, les "test") ...

Quelqu'un pourrait m'indiquer comment procéder ?
Merci d'avance,
Gaylord.P. Smiley smile
Modifié par Gaylord.P (05 Oct 2008 - 18:14)

<?php
$var = '(AAA[family_tax])test(AAA[family_tax_1])test(AAA[family_tax_2])';

$pattern = '/(.*)\(AAA\[(.*)\]\)/iU';
preg_match_all($pattern, $var, $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";
?>


Ca te va comme ça ?
Modérateur
Salut,

Je fais une petite apparition pour demander plus de spécifications sur la fonction : preg_match_all(). Je viens de regarder dans la doc officielle, mais j'ai pas tout à fait saisie son fonctionement avec le pourquoi du comment ?
Je connais assez bien preg_match, mais cela plusieurs fois que je rencontre preg_match_all() sans savoir ce qu'elle fait exactement.

Je vous remercie par avance de m'indiquer comment fonctionne cette méthode.

++
Modifié par Nolem (05 Oct 2008 - 21:31)
La seule différence pour preg_match_all() est :
a écrit :
Après avoir trouvé un premier résultat, la recherche continue jusqu'à la fin de la chaîne.

Ce qui veut dire que s'il y a plusieurs résultat, preg_match_all() les retourne tous.

Tu peux tester par toi meme avec ça :
<?php
$var = '(AAA[family_tax])test(AAA[family_tax_1])test(AAA[family_tax_2])';

$pattern = '/(.*)\(AAA\[(.*)\]\)/iU';
preg_match_all($pattern, $var, $matches);
preg_match($pattern, $var, $matches2);

echo "<pre>";
echo "<strong>preg_match_all() : </strong><br />";
print_r($matches);
echo "<strong>preg_match() : </strong><br />";
print_r($matches2);
echo "</pre>";
?>