2010-01-06 2 views
0

MISE À JOUR: Je progresse, mais c'est dur! Le texte d'essai sera valid[REGEX_EMAIL|REGEX_PASSWORD|REGEX_TEST].Seul, une partie d'une regex fonctionne. Avec une partie ajoutée avant et une autre après, elle cesse de fonctionner

(Le texte réel de la vie est required|valid[REGEX_EMAIL]|confirmed[emailconfirmation]|correct[not in|emailconfirmation|email confirmation].)

([^|]+) sauve REGEX_EMAIL, REGEX_PASSWORD et REGEX_TEST dans un tableau.

^[^[]+\[ matchs valides [

\] résultats]

^[^[]+\[ + ([^|]+) + \] ne sauve pas REGEX_EMAIL, REGEX_PASSWORD et REGEX_TEST dans un tableau.

Comment résoudre?

+0

L'autre question: tout correspond, à l'exception [,] et tout Entre et ]. Cette question: entre [et], diviser la chaîne en utilisant | comme délimiteur dans un tableau. –

Répondre

1

Pourquoi est-il important de tout essayer avec une seule expression régulière? Il devient beaucoup plus facile si vous extrayez les deux premières parties, puis diviser les cordes sur | à l'aide d'exploser:

$s = 'valid[REGEX_EMAIL|REGEX_PASSWORD|REGEX_TEST]'; 
$matches = array(); 
$s = preg_match('/^([^[]++)\[([^]]++)\]$/', $s, $matches); 
$left = explode('|', $matches[1]); 
$right = explode('|', $matches[2]); 
print_r($left); 
print_r($right); 

Sortie:

Array 
(
    [0] => valid 
) 
Array 
(
    [0] => REGEX_EMAIL 
    [1] => REGEX_PASSWORD 
    [2] => REGEX_TEST 
) 
+0

S'il vous plaît, revenez! La question a été mise à jour. –

+0

J'ai mis à jour ma réponse. –

+0

c'est vraiment comme si tu l'avais dit! '(?: c (a) t) +' pour catcat enregistre la seconde un seul :-(++ est trop avancé, je ne comprends toujours pas le groupement atomique :-( –

Questions connexes