2016-05-30 141 views
-1

需要提取從strats在「類型 - 」和「-id」結尾的字符串的信息PHP提取子字符串之前和一個字符串的字符後

IDlocationTagID-type-area-id-492 

這裏是字符串,所以我需要提取值:從字符串區和492:

後「類型 - 」之前「-id」後「ID-」

+2

什麼你到目前爲止已經試過?發佈您的嘗試。 –

回答

1

這是你想要使用兩個爆炸的東西。

$str = 'IDlocationTagID-type-area-id-492'; 
echo explode("-id", explode("type-", $str)[1])[0]; //area  
echo trim(explode("-id", explode("type-", $str)[1])[1], '-'); //492 

小簡單的方法。

echo explode("type-", explode("-id-", $str)[0])[1]; // area 
echo explode("-id-", $str)[1]; // 492 

使用正則表達式:

preg_match("/type-(.*)-id-(.*)/", $str, $output_array); 
print_r($output_array); 

echo $area = $output_array[1]; // area 
echo $fnt = $output_array[2]; // 492 
+0

太多爆炸了,但它把我推向了使用ArrayIterator的想法(+1) –

+0

這個問題必須標記爲正則表達式。 –

+0

您在preg_match中有錯誤。您的代碼串 「$ STR =「IDlocationTagID型區域-ID-492fdfgdgdg」 返回: 陣列( => \t型區域-ID-492fdfgdgdg => \t區域 => \t 492fdfgdgdg ) 但id必須是int –

0
$matches = null; 
$returnValue = preg_match('/type-(.*?)-id/', $yourString, $matches); 
echo($matches[1]); 
2

可以使用的preg_match: 例如:

preg_match("/type-(.\w+)-id-(.\d+)/", $input_line, $output_array); 

要檢查,你可能需要的服務:

http://www.phpliveregex.com/

附:如果函數的preg_match會過重,還存在另一種解決方案:

$str = 'IDlocationTagID-type-area-id-492'; 
$itr = new ArrayIterator(explode('-', $str)); 
foreach($itr as $key => $value) { 
    if($value === 'type') { 
     $itr->next(); 
     var_dump($itr->current()); 
    } 
    if($value === 'id') { 
     $itr->next(); 
     var_dump($itr->current()); 
    } 
} 
+0

正則表達式沒有被標記,所以我只使用PHP。 –

+0

也許你可以更多地優化這個表達式。 –

1

您可以用爆炸來獲取值:

$a = "IDlocationTagID-type-area-id-492"; 
$data = explode("-",$a); 
echo "Area ".$data[2]." Id ".$data[4]; 
相關問題