2015-01-21 62 views
0

我有串:分割字符串的preg_match

$productList=" 
Saluran Dua(Bothway)-(TAN007); 
Speedy Password-(INET PASS); 
Memo-(T-Memo); 
7-pib r-10/10-(AM); 
FBI (R/N/M)-(Rr/R(A)); 
"; 

我想要的結果是這樣的:

Array(
[0]=>TAN007 
[1]=>INET PASS 
[2]=>T-Memo 
[3]=>AM 
[4]=>Rr/R(A) 
); 

我用:

$separator = '/\-\(([A-z ]*)\)/'; 
preg_match_all($separator, $productList, $match); 
$value=$match[1]; 

但結果:

Array(
[0]=>INET PASS 
[1]=>AM 
); 

必須有錯誤的代碼,有人可以幫助嗎?

+1

添加數字'0-9'和破折號'-'您的正則表達式 – 2015-01-21 07:34:53

回答

0

您需要0-9

爲這是第3行中的1號線,你需要一個 - 在你需要的最後一行,並

() 試試這個

#\-\(([a-zA-Z/0-9(\)\- ]*)\)# 
+1

'[AZ]'包括所有A'和''之間的字符z'。從[ASCII表格](http://www.asciitable.com)可以看到,它**包含** A到Z,a到z和6個其他字符: '''','''''','^','_'和反引號[**'**]。 – axiac 2015-01-21 07:58:40

+0

@axiac好吧,我不知道,我刪除了該行。 – jmattheis 2015-01-21 08:11:45

0

嘗試用這個表達式

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#'; 
3

regex不包括所有的通道可以出現在您想要捕捉的文本片段中的字符。

正確regex是:

$match = array(); 
preg_match_all('/-\((.*)\);/', $productList, $match); 

說明(從內到外):

  • .*匹配任何內容;
  • (.*)是上面放在括號中的表達式來捕獲$match[1]中的匹配;
  • -\((.*)\);在上下文中是上面的內容:如果它前面有-(並且後面跟着);;圓括號被轉義爲使用它們的字面值而不是它們的特殊解釋;
  • 在正則表達式中不需要轉義-;它只有當它使用的字符範圍內([A-Z],遠東)內,但即使在那裏,如果連字符(-)是[或右側前]那麼它就沒有特殊的含義之後特別解釋;例如[-A-Z]表示:破折號(-)或任何大寫字母(AZ)。現在

print_r($match[1]);看起來是這樣的:

Array 
(
    [0] => TAN007 
    [1] => INET PASS 
    [2] => T-Memo 
    [3] => AM 
    [4] => Rr/R(A) 
)