PHP正则表达式preg_grep

PHP正则表达式preg_grep,php,regex,Php,Regex,我有一个数组,看起来像这样: $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[] = 'M

我有一个数组,看起来像这样:

$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);
我将所有包含名称的行放入一个名为$names的数组中,如下所示:

$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';
正如你所看到的,有一种模式。所有行均以MT开头,后跟4位产品编号。后跟3个字符,对于蛋白质,它们是001:)

我试过以下方法,但没有成功

$proteins = preg_grep("/MT{4}[0-9]001/", $array);
匹配“MT”,后跟4位数字,后跟“001”,后跟零个或多个字符


使用诸如RegExr之类的工具,您可以更轻松地处理这个问题,这里有一个与您的示例相关的链接:

因此您只需要在小数模式
[0-9]
之后交换
{4}
量词。另外,在开始处添加一个锚点
^
,因为您应该断言字符串的开头。您要获取的数据是什么?例如,在第一个数组项(MT0001001)中,您想要2.9、2.6或3.5等吗?实际上我只想要第一个,2.9I不需要。*,但其余的都可以!非常感谢我的朋友!