2016-01-14 1 views
0

Я пытаюсь извлечь суммы от последующей строки/текста:количество экстракта с preg_match из строки

Offerlist: 19939 Product: Technic Time: 13.01.16 - 14:08 Delivery: txt Offer36: 0,00 EUR Offer38: 185€ Best-Offer: 0,00 Offer5: 100 Offer1: 000000 Offer34: 80,00€ Offer5443: 185€ Offer876a: 00 Best-Offer: 200 

Я попытался это:

if (preg_match("/(?<=Offer1:)(.*?)(?=Offer34:)/s", $output, $result)) { 
    $offer = trim($result[0]); 
} 

Но проблема в том, если имя или положение, скрипт больше не работает.

+0

Просьба пояснить, вы просто пытаетесь получить значение 1-го предложения '000000' или все из них? – Steve

+0

Что из этой строки вы хотите? Возможно, вы могли бы просто использовать ': \ h + ([\ d,] +)'? – chris85

+0

Я пытаюсь получить все из них. И я должен искать пример для Offer1 и получить сумму. – Mann87

ответ

1

Возможно, вам следует искать значение вместо своих братьев и сестер.

Так следующий скрипт должен работать лучше:

$dates = []; 
if (preg_match_all("/(\w+\d*): (\d+(,\d+)?[€]?|\d\d\.\d\d.\d\d \- \d\d:\d\d|\w+)/s", $output, $result, PREG_SET_ORDER)) { 
    foreach ($result as $data) { 
    $dates[] = [$data[1] => $data[2]]; 
    } 
} 
+0

Эта версия некорректна для символов '' '. – maxhb

+0

Правда, не проверял его, но он должен работать, если вы удалите квадратные скобки вокруг него. – nemoinho

1

Использование preg_match_all() и очень явное программирование это можно сделать так:

$string = 'Offer1: 000000 Offer34: 80,00€ Offer5443: 185€ Offer876a: 00 Best-Offer: 200'; 

$regex = '/((best-)?offer[^:]*:)([ 0-9,€]+)/i'; 

preg_match_all($regex, $string, $matches); 

$offers = []; 
for($c = 0; $c < count($matches[1]); $c++) { 
    $label = substr($matches[1][$c],0,-1); 
    $offers[$label] = trim($matches[3][$c]); 
} 

var_dump($offers); 

Выход:

array(5) { 
    ["Offer1"]=> 
    string(6) "000000" 
    ["Offer34"]=> 
    string(8) "80,00€" 
    ["Offer5443"]=> 
    string(6) "185€" 
    ["Offer876a"]=> 
    string(2) "00" 
    ["Best-Offer"]=> 
    string(3) "200" 
} 

Живой пример можно найти по адресу: http://sandbox.onlinephpfunctions.com/code/549db3d4d797e5821ede99612b18ac24d19ce9e8

+0

Что мне нужно изменить, если я хочу иметь всю ценность с помощью «:»? Также время, продукт? – Mann87