我有这种格式的文件:
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);
我得到一个空数组。
答案 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]
中。