2015-03-24 2 views
0

У меня есть этот текст:Быстрый регулярное выражение 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, поскольку я, по крайней мере, знаком с языком.

любые идеи? Я ценю всю вашу помощь

+2

что ваш ожидаемый выход? –

+2

И, пожалуйста, покажите нам больше образцов. Если они меняются, то решение для примера в вашем вопросе, скорее всего, не будет применяться к другим входам. –

+0

@AvinashRaj мой ожидаемый выход будет адресом и «ключом», например. 1DEYKqtPtAEt5hDfiAlz7SdFEGUSPguxGu uembzzQdgFHq9k0UJfEi4Dnkvc7n3N5tWVNRQmKfZpeJPnyzKVzKSVVsvLGL6bY предпочтительно в массиве (PHP) – wiZZmnma

ответ

0

Вам нужно использовать регулярное выражение группы захвата в функции 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 
) 
+0

работает! благодаря! Это было быстро!! Вопрос: Если адрес и ключ имеют фиксированную длину, облегчит ли их анализ? Я имею в виду, что некоторые ключи недействительны (слишком короткие или слишком длинные), но это не проблема. 2 из 100 недействительных матчей, я могу с этим жить. Спасибо, ты спасатель жизни! – wiZZmnma

+0

[Дайте некоторое преимущество спасателю.] (Http://stackoverflow.com/help/accepted-answer) –

+0

отмечен как ответ. Vote Up требует 15 репутации, и у меня их нет – wiZZmnma

Смежные вопросы