2015-01-21 58 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) 
)