2017-03-01 7 views
1

それでも、正規表現は心が鈍っています。しかし、私は、通貨記号£に従う製品価格設定に基づいて任意の数値をPHPでpreg_matchする作業正規表現を持っています。これは、すべてのバリアント(千、小数など)を検討するための実例を見つけることができなかったので役に立ちます。正規表現の改善は全く歓迎です!Regexを製品価格設定の末尾の通貨記号で使用する

私の質問は、なぜ配列には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 
     ) 
) 
関連する問題