2011-10-26 36 views
1

我真的努力做一些正則表達式來轉:拆分這些結果到數組

Child Non Peak @ $10.75 USD <br/> 
<input name="quan0" maxlength="1" size="1" class="star_N"/> <br> 
Infant Non Peak @ $13.75 USD <br/> 
<input name="quan1" maxlength="1" size="1" class="star_N"/> <br> 
Adult Non Peak @ $13.75 USD <br/> 
<input name="quan2" maxlength="1" size="1" class="star_N"/> <br> 
Senior Non Peak @ $12.50 USD <br/> 
<input name="quan3" maxlength="1" size="1" class="star_N"/> <br> 
Member Adult Non Peak @ $12.75 USD <br/> 
<input name="quan4" maxlength="1" size="1" class="star_N"/> <br> 
Member Senior Non Peak @ $11.50 USD <br/> 
<input name="quan5" maxlength="1" size="1" class="star_N"/> <br> 
Member Child Non Peak @ $9.75 USD <br/> 
<input name="quan6" maxlength="1" size="1" class="star_N"/> <br> 

到一個數組,多數民衆贊成像

array (
value: Child Non Peak @ $10.75 USD 
price: 10.75 

誰能幫助?我已經有了這個很複雜的正則表達式,但它不適合用途。

preg_match_all('/class="t12">(?P<type>\w+)[\[email protected]]*(?P<cost>\$[\d.]*)\s+USD(.*)name="(?P<input>quan\w+)"/msU', 
       $output, 
       $matches, 
       PREG_SET_ORDER); 
+0

太本地化;嘗試rentacoder! :) –

回答

1
preg_match_all('/[\w ]* @ \$?([0-9]{1,}\.?[0-9]*) [A-Z]{2,3} ?/', $output, $matches, PREG_SET_ORDER); 

print_r($matches); 

給下一個結果:

Array 
(
    [0] => Array 
     (
      [0] => Child Non Peak @ $10.75 USD 
      [1] => 10.75 
     ) 
    [1] => Array 
     (
      [0] => Infant Non Peak @ $13.75 USD 
      [1] => 13.75 
     ) 
    [2] => Array 
     (
      [0] => Adult Non Peak @ $13.75 USD 
      [1] => 13.75 
     ) 
    [3] => Array 
     (
      [0] => Senior Non Peak @ $12.50 USD 
      [1] => 12.50 
     ) 
    [4] => Array 
     (
      [0] => Member Adult Non Peak @ $12.75 USD 
      [1] => 12.75 
     ) 
    [5] => Array 
     (
      [0] => Member Senior Non Peak @ $11.50 USD 
      [1] => 11.50 
     ) 
    [6] => Array 
     (
      [0] => Member Child Non Peak @ $9.75 USD 
      [1] => 9.75 
     ) 
) 
+0

此正則表達式中的$符號是可選的 –

1

([a-zA-Z ]+ @ \$(\d+\.\d{2}) USD)也許應該給你很好的效果

  • [a-zA-Z ]+是產品名稱,
  • @是產品和價格
  • \$(\d+\.\d{2})價格之間,group ATLEAST捕獲1個數字,後面接着。接着2位數字
  • USD捕獲最後空間和貨幣參考
+0

如果您只允許'$',您也可以排除所有非美元貨幣:)。 – middus

+0

你是多麼正確,編輯我的答案:> –