正则表达式从文件中提取哈希值

时间:2016-02-20 22:43:43

标签: php regex hash

我有这种格式的文件:

5:Name: {"hash":"c602720140e907d715a9b90da493036f","start":"2016-02-20","end":"2016-03-04"}
5:Name: {"hash":"e319b125d71c62ffd3714b9b679d0624","sa_forum":"on","start":"2015-11-14","end":"2016-02-20"}

我正在尝试使用正则表达式提取哈希键和日期。 我该怎么办?

我尝试使用此/^[a-z0-9]{32}$/作为哈希,但它不起作用。

我很感激一些帮助。

修改:这是一个文本文件,我试图preg_match()。这是我的代码:

$file = file_get_contents("log.txt");

preg_match("/^[a-z0-9]{32}$/",$file, $hashes);
var_dump($hashes);

我得到一个空数组。

1 个答案:

答案 0 :(得分:2)

问题在于您将匹配与^$绑定在一起,但实际上您希望匹配字符串中间。试试这个:

/(?<=")[a-f0-9]{32}(?=")/

这只会在引号之间匹配。此外,您不需要a-z,因为它只能是a-f

此外,既然你想要一个文件中所有哈希值的数组而不只是一个,你需要preg_match_all()

php > $file = file_get_contents("hashfile.txt");
php > preg_match_all('/(?<=")[a-f0-9]{32}(?=")/', $file, $matches);
php > var_dump($matches);
array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(32) "c602720140e907d715a9b90da493036f"
    [1]=>
    string(32) "e319b125d71c62ffd3714b9b679d0624"
  }
}
php >

在上面的示例中,匹配项存储在数组$matches[0]中。