2012-07-27 35 views
0

我試圖從字符串例如提取一些公制尺寸:PHP正則表達式來提取公制尺寸

例子:

$s1=" foobar 10mm bar"    // 10mm 
$s2=" foobar 10-300ml barbr"  // 10-300ml 
$s3=" foobar 25 - 70 cm foo"  // 25-70cmm 

我怎麼做呢?

我已經試過這使:

$sizes_volume_distance_markers = array('mm','ml','l','cm'); 
static $pattern_final_voldist; 
    if(!$pattern_final_voldist) 
    { 
     $pattern_final_voldist = implode("|",self::$sizes_volume_distance_markers); 
    } 

if(preg_match_all("/([\d.-]{1,4}[\s.-]{0,2}($pattern_final_voldist) {1,2})+/i",$str,$vvalues)) 
     { 
       var_dump($vvalues); 
     } 
+0

你到目前爲止嘗試過什麼?你可以發佈你目前的嘗試,以便我們可以看到你的問題在哪裏?請注意,這個網站是關於幫助具體問題,而不是讓別人做你的功課的地方。 – arkascha 2012-07-27 09:17:46

+0

正則表達式可能是:([\ d - ] +(mm | ml | cm)) – donald123 2012-07-27 09:19:36

回答

1

應該作品,在最後括號來添加其他後綴:

/(\d+\s+?\-\s+?)?(\d+)\s+?(mm|ml|cm)/gi 

用法:

$source=" foobar 10mm bar foobar 10-300ml barbr foobar 25 - 70 cm foo" 
preg_match_all("/(\d+\s+?\-\s+?)?(\d+)\s+?(mm|ml|cm)/i",$source, $results); 

如果您需要匹配漂浮用這個代替:

/(\d+(\.\d+)?\s+?\-\s+?)?(\d+(\.\d+)?)\s+?(mm|ml|cm)/gi 
+0

真棒:D謝謝Rogal111! – user914584 2012-07-27 09:24:18

+0

將'?s更改爲'\ s +?',我會+1這個... – DaveRandom 2012-07-27 09:31:58

+0

它會做什麼? – user914584 2012-07-27 09:34:50