2017-02-01 6 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' 기반 패턴입니다. –