2009-01-19 101 views
1

我有一個正則表達式這樣的(大大簡化):一個子表達式(正則表達式)的無限匹配只返回一個匹配

^(ab)*$ 

和我匹配反對這樣的:

abababababababab 

當我通過preg_match運行它:

preg_match('/$(ab)*$/', 'abababababababab', $matches); 
print_r($matches); 

我得到這個:

Array 
(
    [0] => abababababababab 
    [1] => ab 
) 

Wheras我想到這一點:

Array 
(
    [0] => abababababababab 
    [1] => ab 
    [2] => ab 
    [3] => ab 
    [4] => ab 
    [5] => ab 
    [6] => ab 
    [7] => ab 
    [8] => ab 
} 

我怎樣才能得到我的期望?

(請注意,子表達式可以更復雜,例如([aA][bB]),我希望在他們的主題順序匹配的表情。)

回答

4

使用preg_match_all這樣做吧:

preg_match_all('/(ab)/', 'abababababababab', $matches); 
print_r($matches); 

請記住,preg_match只提供第一個匹配,並且preg_match_all具有相同的功能,但返回全部。還要注意,現在正則表達式已經改變。如果使用星號,它可能會消耗第一場比賽中的整個字符串。但是,您可以嘗試使用(ab)*?之類的東西,以使其非常實用。

+0

這很好。謝謝! – strager 2009-01-19 19:42:46