简体   繁体   English

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

[英]Quick regex grep/perl/php

I have this text: 我有这段文字:

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

and I'm trying to extract the pseudo BTC account and the matching key. 我正在尝试提取伪BTC帐户和匹配密钥。 The text is not regular like the apache logs, so you could have a really long line with 5 or 10 addresses or a single line with the same info. 文本不像apache日志那样规则,因此您可能会有一行很长的行,其中包含5个或10个地址,或者一行中包含相同的信息。 Now how do I match the pseudo BTC account and it's matching key, from the "logged in" and "transferred" part, even if there are a many occurrences in one line? 现在,即使一行中出现多次,如何从“登录”和“转移”部分匹配伪BTC帐户及其匹配密钥?

I have tried this: 我已经试过了:

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");

which gets me the address but not the matching key. 这会给我地址而不是匹配的密钥。 I would like to parse the text either using grep, perl or php. 我想使用grep,perl或php解析文本。 whatever works easier. 任何更容易的工作。 I have been trying with php since I'm at least familiar with the language. 我一直在尝试php,因为我至少对这种语言很熟悉。

any ideas? 有任何想法吗? I appreciate all your help 感谢您的帮助

You need to use capturing group based regex in preg_match_all function. 您需要在preg_match_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]);

Output: 输出:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM