2017-03-01 54 views
1

所以,仍然學習,正則表達式是頭腦麻木的東西。但我有一個工作正則表達式preg_match在PHP的任何數字基於產品定價後面的貨幣符號£。這可能是有用的,因爲我找不到一個工作示例來考慮所有變體(例如千位和小數等)。任何對正則表達式的改進都完全可以接受!使用正則表達式與產品定價尾隨貨幣符號

我的問題是爲什麼數組包含每個數字的3個實例?接下來的「2」是什麼意思?

(?<=\£|GBP)((\d{1,6}(,\d{3})*)|(\d+))(\.\d{2})? 

功能:

的print_r傾銷:

[3] => Array 
    (
     [0] => Array 
      (
       [0] => 545 
       [1] => 2 
      ) 

     [1] => Array 
      (
       [0] => 545 
       [1] => 2 
      ) 

     [2] => Array 
      (
       [0] => 545 
       [1] => 2 
      ) 

    ) 
+0

但到底爲什麼你不顯示的示例串! –

+0

已添加。我不認爲這會有所幫助。 – Jquestions

+0

換句話說,你不太明白我的問題:你能顯示你的xml文件嗎? –

回答

1

您當前正則表達式有很多不必要的分組/格式,這是沒有必要的。下面正則表達式將適合你的情況:

(?<=£|GBP)[\d.,]+ 

看到demo/explanation

PHP

(實現)

<?php 
    $re = '/(?<=£|GBP)[\d.,]+/'; 
    $str = '£545 £5450 £54.20 £5450 £545,620 £545,620.96 
      GBP545 GBP5450 GBP54.20 GBP5450 GBP545,620 GBP545,620.96'; 
    preg_match_all($re, $str, $matches); 
    print_r($matches); 
?> 

(輸出)

Array 
(
    [0] => Array 
     (
      [0] => 545 
      [1] => 5450 
      [2] => 54.20[3] => 5450 
      [4] => 545,620 
      [5] => 545,620.96 
      [6] => 545 
      [7] => 5450 
      [8] => 54.20 
      [9] => 5450 
      [10] => 545,620 
      [11] => 545,620.96 
     ) 
)