我想写一些函数,接受两个参数$text
和$keys
。数组中的键.
在输出中,我们需要得到一个数组,其中的键将是传递给函数的键(如果我们在文本中找到它们),值将是这个键之后的文本,直到它遇到下一个键或文本结束。如果键在文本中重复,则只将最后一个值写入数组
例如:
- 可视化文本:* 存有只是印刷和排版行业的一个虚拟文本。存有一直是行业的一标准假人自从三16世纪的文本。
$text = 'Lorem Ipsum is simply one dummy text of the printing and two typesetting industry. Lorem Ipsum has been the industry\'s one standard dummy text ever since the three 1500s.';
$keys = ['one', 'two', 'three'];
预期输出:
[
'one' => 'standard dummy text ever since the',
'two' => 'typesetting industry. Lorem Ipsum has been the industry\'s',
'three' => '1500s.'
]
我试着写一个正则表达式来科普这个任务,但没有成功。
最后一次尝试:
function getKeyedSections($text, $keys) {
$keysArray = explode(',', $keys);
$pattern = '/(?:' . implode('|', array_map('preg_quote', $keysArray)) . '):\s*(.*?)(?=\s*(?:' . implode('|', array_map('preg_quote', $keysArray)) . '):\s*|\z)/s';
preg_match_all($pattern, $text, $matches);
$keyedSections = [];
foreach ($keysArray as $key) {
foreach ($matches[1] as $index => $value) {
if (stripos($matches[0][$index], $key) !== false) {
$keyedSections[trim($key)] = trim($value);
break;
}
}
}
return $keyedSections;
}
1条答案
按热度按时间x6yk4ghg1#
这里有一个
preg_match_all()
的方法,它提取了从任何键开始到任何键之前结束的所有段。array_column()
调用只是为了后面的匹配而丢弃前面的匹配,并设置所需的关联结果。(Demo)输出量: