我有一个文件CHANGELOG.md,看起来像:
# Changelog
## 3.2.0 - 2014-05-22
- iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet
- doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui
## 3.1.2 - 2014-03-22
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam,
- quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et
## 3.1.1 - 2014-03-25
- facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum.
- Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
我想使用php查找最新的更改日志版本并将其添加到变量$changelog
我以为我可以在php中使用fopen()和fseek()函数,但我以前从来没有这么做过。您认为实现拉出这个字符串的最佳方式是什么?
答案 0 :(得分:0)
尝试使用explode()
$cLogArray = explode('##', file_get_contents($changeLogFile))
而不是需要的部分:
$changeLog = $cLogArray[0]
答案 1 :(得分:0)
假设模式保持不变,您可以多次爆炸字符串并提取版本号。可能不太理想,但这是一个快速修复。
$str = file_get_contents('path/to/CHANGELOG.md');
$first_explode = explode('##', $str);
$second_explode = explode("\n", $first_explode[1]);
$changelog = $second_explode[0];
echo $changelog;
答案 2 :(得分:0)
这个只提取你的版本号:
Array
(
[0] => 3.2.0
[1] => 3.1.2
[2] => 3.1.1
)
我使用此RegEx:/## [0-9.]* - /
会找到,例如## 3.2.0 -
。
然后,我迭代并删除了##
和-
。
以下是我使用的代码:
$a = file_get_contents($changeLogFile)
$cLogArray = preg_match_all('/## [0-9.]* - /', $a, $n);
foreach ($b as $v) {
$result = str_replace(' - ', '', str_replace('## ', '', $v));
}
如果最高数字始终位于最前面,则无需对数组进行排序,但如果需要,最后添加此步骤:
rsort($result);
执行此操作后,$result[0]
将始终为最高编号。
答案 3 :(得分:0)
最好的方法是使用正则表达式:
$subject=file_get_contents($changeLogFile);
if(preg_match("/## ([0-9]*?[.][0-9]*?[.][0-9]*?) - ([0-9]{4}-[0-9]{2}-[0-9]{2})/", $subject, $matches))
{
$changelog=$matches[1];
$changelogdate=$matches[2];
}
echo "$changelog $changelogdate";
这可以满足您的需求甚至是日志。 :)