如何在字符串中提取位于第二次出现的“:”字符和第二次出现“,”之间的字符串?
substr()无法帮助我,因为我要提取的字符串的和平长度可能会有所不同。我没有发布任何代码,因为我不知道从哪里开始。我正在搜索字符串操作函数,但到目前为止没有任何运气。我不确定是否可以使用正则表达式来完成,因为它是第二次并发。
以下是我试图操作的字符串部分
[3] => 93,text:Πού είναι αυτή η πόλη:,photo:c083,correct:2,answers:[{text:Βενεζουέλα.,correct:false},{text:Βραζιλία.,correct:false},{text:Πέρυ.,correct:true}]},{
答案 0 :(得分: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
希望有所帮助。
答案 1 :(得分: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);
这段代码可以短得多。当我清理这个烂摊子时,我会尝试更新这段代码,但是可以自由发布更好的&更短的选择。