2012-08-05 5 views
1

Lorsque vous utilisez preg_replace avec motif répétitif, la référence juste revenir le dernier. Y a-t-il un moyen de tout obtenir?preg_replace avec motif répétitif

par exemple:

$str = "hello, world, hello1, world1" 
echo(preg_replace('/([^,]*,?)+/', '$1', $str)); 

reviendriez monde1, mais est-il possible d'accéder à l'autre partie adaptée?

Ceci est juste un exemple, je veux juste savoir s'il y a un moyen d'accéder à toute la partie apparié en référence?

+0

Pourquoi ne pas utiliser d'exploser à la place? –

+0

ou 'preg_split()'? – alex

+0

Ceci est un exemple, pas le cas réel. – Ali

Répondre

2

En aparté, je suis allé tester mes exemples, et a constaté que le vôtre ne fonctionne pas vraiment. Il doit être [^,]+ pas [^,]* sinon il mange l'entrée:

$str = "hello, world, hello1, world1" 
echo preg_replace('/([^,]*,?)+/', '$1', $str); 
# -> "" 
echo preg_replace('/([^,]+,?)+/', '$1', $str); 
# -> " world1" 

Vous pouvez capturer toutes occurrences, en ajoutant un autre jeu de supports:

$str = "hello, world, hello1, world1" 
echo preg_replace('/(([^,]+,?)+)/', '$1', $str); 
# -> "hello, world, hello1, world1" 

Ou vous pouvez remplacer chaque occurrence individuelle, plutôt que le motif répétitif entier:

$str = "hello, world, hello1, world1" 
echo preg_replace('/([^,]+,?)/', '$1 AND', $str); 
# -> "hello, AND world, AND hello1, AND world1 AND" 

Si aucun de ces deux t vous voulez, alors je suspecte preg_replace n'est pas ce que vous voulez, et preg_match_all pourrait être plus approprié.

+0

aucun d'entre eux est ce que je veux! Merci quand même. – Ali

Questions connexes