gpt4 book ai didi

文件内容中的 PHP 正则表达式匹配

转载 作者:行者123 更新时间:2023-12-05 03:15:24 24 4
gpt4 key购买 nike

我根据文件的“年龄”(过去两天)收集了一些文件,现在我需要按照正则表达式模式从中提取文本(在本例中,该模式类似于 Microsoft 产品 key ) ,这是我到目前为止所做的:

<?php

$files = iterator_to_array(
new GlobIterator('/var/www/log/access.log.*', GlobIterator::CURRENT_AS_PATHNAME) );

foreach ($files as $file) {
$filelastmodified = filemtime($file);
if((time()-$filelastmodified) < 48*3600 && is_file($file))
{
$regexp = '/^[A-Z1-9]{5}(-[A-Z1-9]{5}){4}$/';
preg_match_all($regexp, file($file), $keys, PREG_PATTERN_ORDER);
}

}
print_r($keys, true);

?>

但是我得到一个错误:

PHP Warning: preg_match_all() expects parameter 2 to be string, array given in /var/www/log/keys.php on line 11

我做错了什么?另外,我想知道是否可以唯一地保存那些匹配的文本字符串,这意味着如果一个键出现两次,我只需要将它保存一次到数组中。提前致谢

最佳答案

file()函数返回一个数组,尝试使用 file_get_contents($file) 代替。然后你可以使用array_unique()删除重复条目:

preg_match_all($regexp, file_get_contents($file), $keys, PREG_PATTERN_ORDER);
$keys = array_unique($keys);

编辑:

使用另一个变量来收集数组值,然后您可以轻松删除重复项。完整代码:

<?php

$files = iterator_to_array(
new GlobIterator('/var/www/log/access.log.*', GlobIterator::CURRENT_AS_PATHNAME) );

$allkey = Array();
foreach ($files as $file) {
$filelastmodified = filemtime($file);
if((time()-$filelastmodified) < 48*3600 && is_file($file))
{
$regexp = '/([A-Z]{5}(-[A-Z]{5}){4})/';
preg_match_all($regexp, file_get_contents($file), $keys, PREG_PATTERN_ORDER);
$allkey = array_merge($allkey, $keys[1]);
}
}
$allkey = array_unique($allkey);
print_r($allkey);

?>

关于文件内容中的 PHP 正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17064426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com