Py学习  »  Casimir et Hippolyte  »  全部回复
回复总数  1
  1. 构建一个数组,将所有需要的键和值设置为null:
$columns = [
    'APPLICATION ID',
    'STATUS P=PENDING/A=ACTIVE',
    /*...*/
    'RUN CYCLE DESCRIPTION'
];

$keys = array_fill_keys($columns, null);
  1. 构建一个模式来提取字符串中的键和值。要做到这一点,在模式中放置所有需要的键是完全无用的,只需要使用捕获组(此处命名)将键与每个匹配的值隔离(注意 价值 组(可选):
$pat = '~^ \h*+ (?<key> [^:\n]* [^:\s] ) \h* : (?<value> \S+ (?:\h+\S+)* )? ~xm';
  1. 使用 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