正则表达式,用于从字符串中提取ID和名称

时间:2018-07-31 15:23:08

标签: php regex

我需要从以下字符串中提取ID和名称。

$string = $data[1][0];

preg_match('/NAME\s+:([^ID]+)(ID\s+:)(.+)/', $string, $matches);

print_r($matches);

上面的表达式在我尝试过在线工具时有效,但是仅当从数组中获取值时,它才在脚本中不起作用。

字符串值为

$string = 'NAME      : KARL JOHNSON ID        : 12345 (LGW FA-319,320 ) ';

2 个答案:

答案 0 :(得分:1)

如@ CD001的注释中所述,它永远无法工作,但这是可以满足您需求的模式:

NAME +: +([a-zA-Z ]+)ID +: *(.+)

第一个被捕获的组是名称,第二个是ID。

Demo

答案 1 :(得分:0)

这是我的尝试:

preg_match('/NAME\s+: ([A-Z ]+) ID\s+: ([0-9]+ )\([A-Z0-9 \-,]+\)/', $string, $matches);

$name = $matches[1];
$id = $matches[2];

完整的输出:

echo '<pre>' . print_r($matches, true) . '</pre>';

Array
(
    [0] => NAME      : KARL JOHNSON ID        : 12345 (LGW FA-319,320 )
    [1] => NAME      : 
    [2] => KARL JOHNSON
    [3] =>  ID        : 
    [4] => 12345 
    [5] => (LGW FA-319,320 )
)

这可能没有被优化,实际上我正在训练RegEx。