-
构建一个数组,将所有需要的键和值设置为null:
$columns = [
'APPLICATION ID',
'STATUS P=PENDING/A=ACTIVE',
/*...*/
'RUN CYCLE DESCRIPTION'
];
$keys = array_fill_keys($columns, null);
-
构建一个模式来提取字符串中的键和值。要做到这一点,在模式中放置所有需要的键是完全无用的,只需要使用捕获组(此处命名)将键与每个匹配的值隔离(注意
价值
组(可选):
$pat = '~^ \h*+ (?<key> [^:\n]* [^:\s] ) \h* : (?<value> \S+ (?:\h+\S+)* )? ~xm';
-
使用
preg_match_all
和
PREG_UNMATCHED_AS_NULL
标志:当可选
价值
组不匹配,返回值为
null
而不是空字符串。
和
预赛
匹配结果,用
$matches['key']
和
$matches['value']
子阵列(请注意,此子阵列的键与阵列的键相同
$keys
但最终一些钥匙丢失了)。
那么你所要做的就是合并
$keys
使用此新数组进行数组,以获取包含您感兴趣的键/值对的关联数组。
if ( preg_match_all($pat, $yourstring, $matches, PREG_UNMATCHED_AS_NULL) ) {
$result = array_combine($matches['key'], $matches['value']);
// $result = array_intersect_key($result, $keys); // if you need to exclude some key/value pairs from the string
$result = array_merge($keys, $result);
}
1,2,3新鲜水3