2014-07-17 45 views
1

我試圖設計出提取的正則表達式:意外的正則表達式的結果與*

aa 
bb 
cc 

從主題:

aa,bb,cc 

我使用以下正則表達式:

|(.+?),*| 

但結果是

a 
a 
b 
b 
c 
c 

請幫忙,

謝謝。

+0

如果它是一個簡單的逗號分隔的列表,那麼爲什麼不使用爆炸(),即$結果=爆炸(」 」,$文字); – jeff

+0

因爲實際的主題是這樣的序言生成的列表:[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

是否必須重複字符串或可以是字母數字字符? –

回答

2

?,使你的對手「非貪婪」,這意味着它將匹配滿足正則表達式的最短的字符串。另外,,*表示0 or more commas

什麼你要找的是:

|[^,]+| 

例如:

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

沒有任何團體,

(?<=^|,)\w+ 

OR

\w+(?=,|$) 

DEMO

PHP代碼將是,

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

輸出:

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