2011-11-01 52 views
2

問題是:如何使用只有(和單個)正則表達式?可能嗎?PHP:獲取正則表達式中的所有組

說明:我有一個這樣的數組:

array 
(
    [0] => 'code1-{1,5}{a,c}', 
    [1] => 'code2-{3,6}{s,q}' 
) 

和我想要做的是讓使用正則表達式,所有的值進行分組,如:

code1 
1,5 
a,c 

我知道我可以使用這個正則表達式得到{...}內的所有數據:

'/\{([^\}]*)\}/i'

而且我知道我可以用這一個

/(.*?)\-/i

我不知道的是,如果有可能合併這兩正則表達式得到破折號前的字符串。逸岸,如果我有這樣的正則表達式

'/(.*?)\-\{([^\}]*)\}/i'

我不能得到我需要的所有數據。我也知道,我可以做這樣的事情:

'/(.*?)\-\{([^\}]*)\}\{([^\}]*)\}/i'

但如果輸入的格式將變爲比如說10 {...}組,它沒有那麼優雅有10組的形式\{([^\}]*)\}這不是我的問題的重點。

這裏有我想要的代碼:

一正則表達式'/\{([^\}]*)\}/i'):http://ideone.com/mN3T2

合併後的正則表達式'/(.*?)\-\{([^\}]*)\}/i'):http://ideone.com/gMdOa

回答

2

更新:OP的編輯

我不相信你可以合併這兩個常規的exp仍然保留循環顯示{1,5}表格的匹配的能力。我認爲最好使用兩個單獨的正則表達式用於此目的,一個用於捕獲coden,另一個用於遍歷{}之間的文本匹配。要做到這一點

一種方法是在-分裂這樣

$result = preg_split('/-/m', 'code1-{1,5}{a,c}');

,然後你會得到code1作爲第一項,並 {1,5}{a,c}爲第二項。現在在第二個條目上應用正則表達式

\{([^\}]*)\}並遍歷匹配。

相關問題