2014-09-09 2 views
1

Я хочу, чтобы захватить только центы из строк у меня есть, а не полный доллар .. все, что начинается с 0.xx, что я хочу повторить из:захватить только центы из строки

$paste = "08/29/2014 Interest Paid  $ 0.03 $ 37.69 
08/25/2014 ACH Deposit   $ 0.93 $ 37.66 
08/20/2014 ACH Deposit   $ 0.63 $ 36.73 
08/04/2014 ACH Deposit   $ 0.95 $ 36.10 
08/04/2014 ACH Deposit   $ 0.57 $ 35.15 
08/04/2014 ACH Deposit   $ 0.88 $ 34.58 
07/31/2014 Interest Paid  $ 0.01 $ 33.70 
07/31/2014 ACH Deposit   $ 0.13 $ 33.69 
07/31/2014 ACH Deposit   $ 0.96 $ 33.56 
07/31/2014 ACH Deposit   $ 0.65 $ 32.60 
07/31/2014 ACH Deposit   $ 0.53 $ 31.95 
07/31/2014 ACH Deposit   $ 0.83 $ 31.42 
07/30/2014 ACH Deposit   $ 0.63 $ 30.59 
07/28/2014 ACH Deposit   $ 0.76 $ 29.96"; 

Я попытался следующие, но это не будет делать то, что мне это нужно, ни эхо линии по линии центов я ищу ...

$find = strpos($paste, '0.'); 
sscanf(substr($paste, $find), '0.%d', $numbers); 

Любая помощь я могу получить на это очень ценится. Заранее спасибо ..

+0

'\ $ \ s? \ D \ d? \. (\ D \ d)' или '\ $ \ s? 0 \. (\ D \ d)' – Jonathon

ответ

3

Вы могли бы попробовать что-то вроде этого

$paste = <<<EOT 
08/29/2014 Interest Paid  $ 0.03 $ 37.69 
08/25/2014 ACH Deposit   $ 0.93 $ 37.66 
08/20/2014 ACH Deposit   $ 0.63 $ 36.73 
08/04/2014 ACH Deposit   $ 0.95 $ 36.10 
08/04/2014 ACH Deposit   $ 0.57 $ 35.15 
08/04/2014 ACH Deposit   $ 0.88 $ 34.58 
07/31/2014 Interest Paid  $ 0.01 $ 33.70 
07/31/2014 ACH Deposit   $ 0.13 $ 33.69 
07/31/2014 ACH Deposit   $ 0.96 $ 33.56 
07/31/2014 ACH Deposit   $ 0.65 $ 32.60 07/31/2014 ACH Deposit   $ 0.53 $ 31.95 
07/31/2014 ACH Deposit   $ 0.83 $ 31.42 
07/30/2014 ACH Deposit   $ 0.63 $ 30.59 
07/28/2014 ACH Deposit   $ 0.76 $ 29.96 
EOT; 

preg_match_all('/\$\s00?\.(\d+)/', $paste, $cents); 
print_r($cents[1]); 

Как вы можете видеть, каждое значение не должно быть в каждой строке ,

Выход:

Array 
(
    [0] => 03 
    [1] => 93 
    [2] => 63 
    [3] => 95 
    [4] => 57 
    [5] => 88 
    [6] => 01 
    [7] => 13 
    [8] => 96 
    [9] => 65 
    [10] => 53 
    [11] => 83 
    [12] => 63 
    [13] => 76 
) 

Если вы хотите иметь все значение, как 0.03 изменить структуру выше этого.

\$\s(00?\.\d+) 

Working PHP demo | Working Regex demo

2

вы можете попробовать:

$matches = array(); 
preg_match_all('/\$ 0.[0-9]{2} /', $paste, $matches); 
+0

сделал var_dump ($ matches) ничего не получил return: array (1) {[0] => array (0) {}} – thevoipman

+0

действительно работает: http://phpfiddle.org/main/code/n5ur-9v7g – rikpg

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