2013-03-19 45 views
3

對於我的生活,我無法弄清楚如何寫正則表達式拆分此。分離一些事情使preg_split

比方說我們有示例文本:

15HGH(Whatever)ASD 

我想它分解爲以下幾組(由自己的數字,字母和括號的內容)

15 
H 
G 
H 
Whatever 
A 
S 
D 

它可以有以上任意組合如:

15HGH 
12ABCD 
ABCD(Whatever)(test) 

到目前爲止,我已經得到它來打破部分或者數字/字母或者只是圓括號部分被打破。例如,在這種情況下:

<?php print_r(preg_split("/(\(|\))/", "5(Test)(testing)")); ?> 

它將給我

陣列 ( [0] => 5 [1] =>測試 [2] =>測試 )

我真的不知道要放什麼東西在正則表達式在合併時匹配只有數字和單個字符。有什麼建議麼?

+0

圖案是給我'陣列([0] => 5 [1] =>測試[2] => [3] =>測試[4] =>)' – hjpotter92 2013-03-19 09:16:02

回答

1

我有這樣的:Example(我不知道\n是怎麼寫的),但替代工作正常。

(\d+|\w|\([^)]++\))不需要太多解釋,首先嚐試獲得一個數字,然後是一個字符,如果沒有什麼東西,就嘗試在圓括號之間得到一個整數。 (他們不能嵌套)

+0

非常感謝!這就是訣竅:) – 2013-03-19 09:26:58

2

我不知道是否preg_match_all滿足你:

$text = '15HGH(Whatever)ASD'; 
preg_match_all("/([a-z]+)(?=\))|[0-9]+|([a-z])/i", $text, $out); 
echo '<pre>'; 
print_r($out[0]); 

Array 
(
    [0] => 15 
    [1] => H 
    [2] => G 
    [3] => H 
    [4] => Whatever 
    [5] => A 
    [6] => S 
    [7] => D 
) 
1

檢查了這一點使用preg_match_all()

$string = '15HGH(Whatever)(Whatever)ASD'; 
preg_match_all('/\(([^\)]+)\)|(\d+)|([a-z])/i', $string, $matches); 

$results = array_merge(array_filter($matches[1]),array_filter($matches[2]),array_filter($matches[3])); 
print_r($results); 

\(([^\)]+)\)- >匹配一切括號之間

\d+- >個號碼只

[a-z]- >單字母僅

i- >不區分大小寫