给定大量文本,我想搜索以下模式:
@key: value
所以一个例子是:
some crazy text
more nonesense
@first: first-value;
yet even more non-sense
@second: second-value;
finally more non-sense
输出应为:
array("first" => "first-value", "second" => "second-value");
答案 0 :(得分:3)
<?php
$string = 'some crazy text
more nonesense
@first: first-value;
yet even more non-sense
@second: second-value;
finally more non-sense';
preg_match_all('#@(.*?): (.*?);#is', $string, $matches);
$count = count($matches[0]);
for($i = 0; $i < $count; $i++)
{
$return[$matches[1][$i]] = $matches[2][$i];
}
print_r($return);
?>
阵列( [first] =&gt;第一价值 [second] =&gt;第二价值)
答案 1 :(得分:1)
在PHP 5.3中测试:
// set-up test string and final array
$myString = "@test1: test1;@test2: test2;";
$myArr = array();
// do the matching
preg_match_all('/@([^\:]+)\:([^;]+);/', $myString, $matches);
// put elements of $matches in array here
$actualMatches = count($matches) - 1;
for ($i=0; $i<$actualMatches; $i++) {
$myArr[$matches[1][$i]] = $matches[2][$i];
}
print_r($myArr);
这背后的原因是:
$actualMatches
只是调整preg_match_all返回的事实
包含所有匹配的额外元素。答案 2 :(得分:0)
您可以尝试逐行循环字符串(explode和foreach)并检查该行是否以@(substr)开头(如果有),将该行爆炸:。
http://php.net/manual/en/function.explode.php
答案 3 :(得分:0)
根据输入字符串的外观,您可以简单地使用parse_ini_string
,或对字符串进行一些小的更改,然后使用该函数。