提取第二次出现特定字符后第二次出现另一个字符的字符串部分

时间:2016-09-22 00:04:25

标签: php regex string

如何在字符串中提取位于第二次出现的“:”字符和第二次出现“,”之间的字符串?

substr()无法帮助我,因为我要提取的字符串的和平长度可能会有所不同。我没有发布任何代码,因为我不知道从哪里开始。我正在搜索字符串操作函数,但到目前为止没有任何运气。我不确定是否可以使用正则表达式来完成,因为它是第二次并发。

以下是我试图操作的字符串部分

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

2 个答案:

答案 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);

这段代码可以短得多。当我清理这个烂摊子时,我会尝试更新这段代码,但是可以自由发布更好的&更短的选择。