2012-04-07 61 views
0

我有一个数组,看起来是这样的:PHP正则表达式preg_grep

$array[] = 'MT0001ENG Apricot, dried'; 
$array[] = 'MT0001SYS Prunus armeniaca L.'; 
$array[] = 'MT0001YLD 0'; 
$array[] = 'MT0001MGR 06'; 
$array[] = 'MT0001SGR 20'; 
$array[] = 'MT0001NCF 6.25'; 
$array[] = 'MT0001FCF 0.800'; 
$array[] = 'MT0001000 1159       00050'; 
$array[] = 'MT0001001 2.9   2.6 3.5 4  05165'; 
$array[] = 'MT0001002 0.1   0.1 0.1 4  00050'; 
$array[] = 'MT0003ENG Pineapple, raw'; 
$array[] = 'MT0003SYS Ananas comosus (L.) Merr.'; 
$array[] = 'MT0003YLD 47'; 
$array[] = 'MT0003MGR 06'; 
$array[] = 'MT0003SGR 40'; 
$array[] = 'MT0003NCF 6.25'; 
$array[] = 'MT0003FCF 0.800'; 
$array[] = 'MT0003000 232       00050'; 
$array[] = 'MT0003001 0.5   0.5 0.6 4  05165'; 
$array[] = 'MT0003002 0.1   0.1 0.1 4  00050'; 

我把所有的线,包含名称,到一个数组名为$名字是这样的:

$names = preg_grep("/ENG/", $array); 

但是现在我想将所有包含蛋白质信息的行放入一个名为$ protein的数组中。的蛋白质系的例子是:

$array[] = 'MT0001001 2.9   2.6 3.5 4  05165'; 
$array[] = 'MT0003001 0.5   0.5 0.6 4  05165'; 

如u可以看到,有一个图案。所有的行都以MT开头。随后是一个4位数的产品编号。接下来是3个字符,对于蛋白质,这些是001 :)

我试过以下,没有运气!

$proteins = preg_grep("/MT{4}[0-9]001/", $array); 
+0

检查我更新的问题:) – mnstrflkrn 2012-04-07 14:55:44

+0

那么你只需要在小数点模式'[0-9]'之后交换'{4}'量词。还要在开始处添加一个锚点'^',因为您应该声明字符串开头。 – mario 2012-04-07 14:57:29

+0

你想要获得哪些数据?例如,在第一个数组项目(MT0001001)中,是否需要2.9或2.6或3.5等? – Odyssey 2012-04-07 14:59:49

回答

1
$names = preg_grep("/MT\d{4}001.*/", $array); 

匹配“MT”后跟4位数字加“001”之后的任何字符,零个或多个

你可以玩这个很容易就能使用像RegExr,工具继承人与你的例子的链接:http://regexr.com?30irf

+0

我不需要。*,但剩下的工作!多谢了朋友! – mnstrflkrn 2012-04-07 15:01:48