簡體   English   中英

快速正則表達式grep / perl / php

[英]Quick regex grep/perl/php

我有這段文字:

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_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]);

輸出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM