Hi,

Thursday, October 17, 2002, 10:33:43 PM, you wrote:
CC> I have looked at these, and they make no sense to me. I tried the substr
CC> function, but it all went a bit pear shaped.

Here is a way that will handle line breaks which tend to stuff up the
string functions:

<?
function find_string($string,$str1,$str2){
        $x = $y = 0;
        $state = 'S';
        $r = '';
        $p = '';
        $len_str = strlen($string);
        $len_x = strlen($str1);
        $len_y = strlen($str2);
        for($i=0;$i<$len_str;$i++){
                switch($state){
                        case 'S':               //try to find first string
                                if($string[$i] == $str1[$x]){
                                        $state = 'P'; //possibly the start
                                        $x++;
                                }
                                break;
                        case 'P':
                                if($string[$i] == $str1[$x]){
                                        if($x == ($len_x -1)){
                                                $state = 'R'; //found the first string 
switch to result
                                        }
                                        else $x++; //keep looking
                                }
                                else{
                                        $state = 'S'; // bummer .. back to search for 
first string again
                                        $x = 0;
                                }
                                break;
                        case 'R':
                                if($string[$i] == $str2[$y]){
                                        $state = 'Q'; //quietly confident we have the 
start of string 2
                                        $y++;
                                        $p .= $string[$i]; //save it in a temp var for 
now
                                }
                                else{
                                        $r .= $string[$i]; // still in result mode
                                        $y = 0;
                                }
                                break;
                        case 'Q':
                                if($string[$i] == $str2[$y]){
                                        if($y == ($len_y -1)){ // yippee found the 
second string
                                                return $r; //all done
                                        }
                                        else{
                                                $p .= $string[$i]; //keep going
                                                $y ++;
                                        }
                                }
                                else{
                                        $r .= $p; // add temp to result
                                        $r .= $string[$i]; // don't forget this one
                                        $p = '';
                                        $y = 0;
                                        $state = 'R'; // oops back to finding string 2
                                }
                                break;
                }
        }
        return ''; //didn't find anything
}

$string = 'I need a function to get a string in between two other strings.';
$str1 = 'function to get';
$str2 = 'two other ';
echo "String: '$string' <br>";
echo "Str1: '$str1' <br>";
echo "Str2: '$str2' <br>";
echo "Extracted: '".find_string($string,$str1,$str2)."'<br>";





-- 
regards,
Tom


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to