2014-07-17 5 views
1

Je suis en train de mettre au point une expression rationnelle qui extrait:résultat Regexp inattendu avec *

aa 
bb 
cc 

du sujet:

aa,bb,cc 

J'utilise l'expression régulière suivante:

|(.+?),*| 

mais le résultat est

a 
a 
b 
b 
c 
c 

Veuillez nous aider,

Merci.

+0

Si elle est simple liste délimitée par virgule alors pourquoi ne pas utiliser explode() par exemple $ result = explode (», ", $ text); – jeff

+0

Parce que le sujet réel est une liste générée par prologue comme ceci: [1 - [], 2- [3-a, 4-b, 5-a, 7-b, 8-d, 9-e, 10- f, 11-g, 12-h, 13-i, 14-l, 15-a, 16-m], 3- []] –

+0

la chaîne doit-elle être répétée ou peut-elle être des caractères alphanumériques? –

Répondre

2

Le ? fait votre match « non gourmand », cela signifie qu'il correspondra à la plus courte possible chaîne qui satisfait l'expression régulière. De même, ,* signifie 0 or more commas.

Qu'est-ce que vous cherchez est:

|[^,]+| 

Par exemple:

<?php 
$foo = "aa,bb,cc"; 
preg_match_all("/[^,]+/",$foo,$matches); 
for($j=0;$j<count($matches[0]); $j++){ 
    print $matches[0][$j] . "\n"; 
} 
?> 
1

Sans aucun groupe,

(?<=^|,)\w+ 

OU

\w+(?=,|$) 

DEMO

code PHP serait,

<?php 
$data = "aa,bb,cc"; 
$regex = '~(?<=^|,)\w+~'; 
preg_match_all($regex, $data, $matches); 
var_dump($matches); 
?> 

Sortie:

array(1) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(2) "aa" 
    [1]=> 
    string(2) "bb" 
    [2]=> 
    string(2) "cc" 
    } 
}