Consider this function. It accepts both position number, and strings arguments:
function get_string_between($string, $start = '', $end = ''){
if (empty($start)) {
$start = 0;
}elseif (!is_numeric($start)) {
$start = strpos($string, $start) + strlen($start);
}
if (empty($end)) {
$end = strlen($string);
}elseif (!is_numeric($end)) {
$end = strpos($string, $end);
}
return substr($string, $start, ($end - $start));
}
Results:
echo get_string_between($string); // result = this is my [tag]dog[/tag]
echo get_string_between($string, 0); // result = this is my [tag]dog[/tag]
echo get_string_between($string, ''); // result = this is my [tag]dog[/tag]
echo get_string_between($string, '[tag]'); // result = dog[/tag]
echo get_string_between($string, 0, '[/tag]'); // result = this is my [tag]dog
echo get_string_between($string, '', '[/tag]'); // result = this is my [tag]dog
echo get_string_between($string, '[tag]', '[/tag]'); // result = dog
echo get_string_between($string, '[tag]', strlen($string)); // dog[/tag]