2016-09-22 112 views
0

如何在字符串中提取位於第二次出現「:」字符和第二次出現「,」之間的字符串片段?提取第二次出現特定字符後出現的字符串部分和第二次出現另一個字符

substr()不能幫助我,因爲我想要提取的字符串的和平長度可能會有所不同。我沒有發佈任何代碼,因爲我不知道從哪裏開始。我在搜索字符串操作函數,但目前爲止沒有任何運氣。我不確定這是否可以用正則表達式來完成,因爲它是第二次同意。

這裏是字符串,我試圖操縱部分

[3] => 93,text:Πού είναι αυτή η πόλη:,photo:c083,correct:2,answers:[{text:Βενεζουέλα.,correct:false},{text:Βραζιλία.,correct:false},{text:Πέρυ.,correct:true}]},{ 
+1

你能給我們一個你想要操縱的字符串的例子嗎? – hammygoonan

+0

我已更新我的問題,謝謝您的建議。 – user2417624

+0

我懷疑你有可能在這個字符串中找到更好的模式。你想要什麼結果? – hammygoonan

回答

1

標識嘗試像下面假設你總是試圖讓photo值:

$str = "93,text:Πού είναι αυτή η πόλη:,photo:c083,correct:2,answers:[{text:Βενεζουέλα.,correct:false},{text:Βραζιλία.,correct:false},{text:Πέρυ.,correct:true}]},{"; 
preg_match_all('/photo:[\w+]*/', $str, $match); 
$photo = explode(':', $match[0][0]); 
$photo_id = $photo[1]; 
echo $photo_id; 
// > c083 

希望有所幫助。

+0

我現在正在檢查你的代碼,它似乎可以工作,只是讓我確保我得到正確的結果,因爲這是一個數組,約1500結果.... – user2417624

+0

偉大的,現在我會嘗試重新使用你的代碼來得到答案1,2,3 ......我可能會有5個人。謝謝。 – user2417624

0

必須有這樣做的更好的辦法,但至少我做它的工作:

 //$question contain the string posted in my question 
     preg_match_all('/photo:/', $question,$position3, PREG_OFFSET_CAPTURE); 

     preg_match_all('/,/', $question,$position4, PREG_OFFSET_CAPTURE); 

     // I was looking for the 3rd occurence of : after all 
     // so change the [2] with [1] if you are looking for second 
     // occurennce 
     $pos3 = $position3[0][2][1] +1; 
     $pos4 = $position4[0][2][1] +1; 

     $startIndex = min($pos3, $pos4); 
     $length = abs($pos3 - $pos4); 

     $photo = substr($question, $startIndex, $length); 
     $photo = strstr($photo, 'photo'); 
     $photo = strstr($photo, ':'); 
     $photo = str_replace (":","",$photo); 
     $photo = str_replace (",","",$photo); 
     $photo = $photo.".jpg"; 
     $photo = trim($photo); 

這代碼可以短得多,當我清理這個混亂時,我會嘗試更新此代碼,但是可以自由發佈更好的更短的選項&。

相關問題