2013-08-10 3 views
0

J'ai une erreur dans ma regex, que quelqu'un a écrit pour moi. J'ai essayé d'écrire ma propre regex, mais c'est juste trop dur pour moi de craquer.Regex ne fonctionne pas avec 1 paramètre

J'ai un "tag" personnalisé comme {module: agenda: getlist: params (2)} Mais .. si je n'ai que 1 param l'expression régulière ne voit pas le 2 mais obtient le mauvais code.

Ceci est mon code regex

$paramcount = preg_match_all('{ 
     # [^,]+ everything that isn't a comma 
     # (?<=...) is a look behind. Meaning that the part that has the 3 dots 
     # becomes matched but not goes through the rest of the regex 

     # matches "null" in "params(null" 
     (?<=params\()[^,]+ 

     | # this is the separation dash 

     # (?=...) is a look ahead, same as the look behind but than on the end 

     # matches "null" in " null)" 
     (?<=)[^,]+(?=\)) 

     | 

     # matches "true" in ", true" and ""foo"" in ", "foo"" 
     (?<=,)[^,]+ 
    }x', $data, $parammatches); 

Alors, quand je tente de faire correspondre .. le résultat est:

$array = array 
    (
     [0] => params(2 
    ); 

Ce n'est pas ce que je veux, je veux seulement 2 pour être correspondait pas le reste. Quand je lui donne plus de paramètres comme ceci "params (null, 2)" tout fonctionne et j'ai 2 belles valeurs de tableau.

Quelqu'un peut-il me guider ou m'aider ici.

EDIT: Plus de sortie peut être trouvée sur pastebin. http://pastebin.com/x0WL9K4u

+0

Quelle est exactement ce que vous voulez? Extraire tous les paramètres passés au param entre parenthèses et les mettre dans le tableau? –

+0

Oui, je ce que je veux. En fait, je veux obtenir tout ce qui est entre les crochets "params (i-veux-ces-valeurs)" –

+0

Pouvez-vous s'il vous plaît poster plus de données d'entrée? –

Répondre

0

Quelqu'un a répondu à ma question. Il a écrit une mise à jour pour mon problème regex

<?php 
$str = 'params(null, true, "Foo", null)'; 

preg_match_all('{ 
# [^,]+ betekend alles wat geen komma is 
# (?<=...) is een look behind. Dit betekend dat het gedeelte op de 3 puntjes 
# gematched moet worden voor de rest van de regex, maar dat hij niet meegenomen 
# wordt in de match 

# matches "null" in "params(null" 
(?<=params\()[^,]+ 

| # dit is het scheidingsteken 

# (?=...) is een look ahead, zelfde als look behind maar dan voor erachter 

# matches "null" in " null)" 
(?<=)[^,]+(?=\)) 

| 

# matches "true" in ", true" and ""foo"" in ", "foo"" 
(?<=,)[^,]+ 
}x', $str, $matches); 

$params = $matches[0]; 
?>