PHP正则表达式preg_grep

时间:2012-04-07 14:47:22

标签: 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[] = '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的数组中,如下所示:

$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);

1 个答案:

答案 0 :(得分:1)

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

匹配'MT'后跟4位数后跟'001'后跟0或更多任何字符

使用像RegExr这样的工具,你可以更轻松地玩这个,这是一个与你的例子的链接:http://regexr.com?30irf