2017-02-01 25 views
-1

我有一个字符串,我必须解析数字有三个字母,但我想使用preg_match相同的模式。解析数字有三个字母与preg_match

这里是我的代码可以帮助我的任何人。

$string=" AMOUNT - 10.00CAD 0.50XGA 1.00XQA"; 
if(preg_match('/^\s+AMOUNT\s+\-\s+\d+[.]\d+[A-Z]{3}\s+((?J)(?<amount>\d+[.]\d+)(XGA)?(?J)\s+(?<amount>\d+[.]\d+)(XQA))/',$string,$m)) 
{ 
    print_r($m); 
} 
+0

那么,什么是你的代码错误? –

+0

嘿维基它不解析第二个数字模式 –

+0

1捕获组=> 1项在结果数组中。 '(?J)'不会帮助。然后再添加一个组。 –

回答

0

我会使用preg_match_all这样的:

$string=" AMOUNT - 10.00CAD 0.50XGA 1.00XQA"; 
if(preg_match_all('/^\s+AMOUNT\s+-\s+(*SKIP)(*F)|(\d+\.\d+)[A-Z]{3}\b/', $string, $m)) { 
    print_r($m); 
} 

输出:

Array 
(
    [0] => Array 
     (
      [0] => 10.00CAD 
      [1] => 0.50XGA 
      [2] => 1.00XQA 
     ) 

    [amount] => Array 
     (
      [0] => 10.00 
      [1] => 0.50 
      [2] => 1.00 
     ) 

    [1] => Array 
     (
      [0] => 10.00 
      [1] => 0.50 
      [2] => 1.00 
     ) 

) 
+0

'^ \ s + AMOUNT \ s + - \ s +(* SKIP)(* F)|'这部分没用。 –

+0

@CasimiretHippolyte:除非OP要匹配以字符开头的字符串。 – Toto

+0

即使在这种情况下,它也不会做任何事情。为了确保几个匹配前面有一些东西,唯一的方法是基于'\ G'的模式。 –