Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
快速正则表达式grep/perl/php_Php_Regex_Perl - Fatal编程技术网

快速正则表达式grep/perl/php

快速正则表达式grep/perl/php,php,regex,perl,Php,Regex,Perl,我有以下案文: 2015-03-11 10:15 - anonymous logged in to [127.0.0.1] on account 1DEYKqtPtAEt5hDfiAlz7SdFEGUSPguxGu using key uembzzQdgFHq9k0UJfEi4Dnkvc7n3N5tWVNRQmKfZpeJPnyzKVzKSVVsvLGL6bY 0.2379845 BTC were transferred to address 1cRa5v0Nxu9ABkkzlTv4dzsyRf

我有以下案文:

2015-03-11 10:15 - anonymous logged in to [127.0.0.1] on account 1DEYKqtPtAEt5hDfiAlz7SdFEGUSPguxGu using key uembzzQdgFHq9k0UJfEi4Dnkvc7n3N5tWVNRQmKfZpeJPnyzKVzKSVVsvLGL6bY 0.2379845 BTC were transferred to address 1cRa5v0Nxu9ABkkzlTv4dzsyRf0hOkg27N using key 1zM9nBd1PNu1FF7qKr1t9Y4m0TawPa3ZQJ1LrlvtViCiB2aFjgn8BIHWG2VHjJvV
我试图提取伪BTC帐户和匹配的密钥。文本不像apache日志那样是规则的,因此您可能有一个包含5或10个地址的很长的行,或者一行包含相同的信息。现在,我如何匹配来自登录和传输部分的伪BTC帐户及其匹配密钥,即使一行中出现了多次

我试过这个:

function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
$parsed = get_string_between($fullstring, "account", "using");
这会给我地址,但不是匹配的钥匙。我想使用grep、perl或php解析文本。只要容易就行。我一直在尝试使用php,因为我至少熟悉这种语言


有什么想法吗?非常感谢您的帮助

您需要在preg\u match\u all函数中使用基于组的正则表达式

$str = "2015-03-11 10:15 - anonymous logged in to [127.0.0.1] on account 1DEYKqtPtAEt5hDfiAlz7SdFEGUSPguxGu using key uembzzQdgFHq9k0UJfEi4Dnkvc7n3N5tWVNRQmKfZpeJPnyzKVzKSVVsvLGL6bY 0.2379845 BTC were transferred to address 1cRa5v0Nxu9ABkkzlTv4dzsyRf0hOkg27N using key 1zM9nBd1PNu1FF7qKr1t9Y4m0TawPa3ZQJ1LrlvtViCiB2aFjgn8BIHWG2VHjJvV";
preg_match_all('~(?:account|address)\s+(\S+)\s+using\s+key\s+(\S+)~m', $str, $match);
print_r($match[1]);
print_r($match[2]);
输出:

Array
(
    [0] => 1DEYKqtPtAEt5hDfiAlz7SdFEGUSPguxGu
    [1] => 1cRa5v0Nxu9ABkkzlTv4dzsyRf0hOkg27N
)
Array
(
    [0] => uembzzQdgFHq9k0UJfEi4Dnkvc7n3N5tWVNRQmKfZpeJPnyzKVzKSVVsvLGL6bY
    [1] => 1zM9nBd1PNu1FF7qKr1t9Y4m0TawPa3ZQJ1LrlvtViCiB2aFjgn8BIHWG2VHjJvV
)

你的预期输出是什么?请给我们更多的输入样本。如果它们不同,则您问题中示例的解决方案很可能不适用于其他输入。@AvinashRaj我的预期输出将是地址和密钥对,例如1DEYKqtPtAEt5hDfiAlz7SdFEGUSPguxGu uembzzqdgfhq9k0ujfei4dnkvc7n3n5twvnrqfzpejpnyzkvzsvvlgl6by,最好是在数组中php@SverriM.Olsen好措辞没有变化,只是行的长度不同。e、 g.上述行在同一行上重复5次,但每次使用不同的btc地址和一个key.works!谢谢太快了!!问题:如果地址和密钥具有固定长度,那么解析它们会更容易吗?我的意思是,有些键太短或太长都无效,但这不是问题。100个无效匹配中有2个,我可以接受。谢谢,兄弟,你是个救命恩人!标记为已回答。投票需要15个声望,而我没有那么多