Первое, что вам нужно сделать, это найти позицию этого «тега».Функция strpos()
делает именно это.
$tag_pos=strpos('<> 1|test|20110404<> <> 1|test|20110404<>', '<>');
if ($tag_pos===false) {
//The tag was not found!
} else {
//$tag_pos equals the numeric position of the first character of your tag
}
Если это действительно линии, эффективный способ получить их все - просто разделить на <>
.
$lines=explode('<>', '<> 1|test|20110404<> <> 1|test|20110404<>');
$lines=array_filter($lines); //Removes blank strings from array
Вы можете улучшить это, добавив функцию обратного вызова к вызову array_filter()
, который использует trim()
для удаления любых пробелов, а затем посмотрите, если этопусто или нет.
Редактировать: Отлично, я вижу, что ваши "теги" отсутствовали в вашем сообщении.Поскольку ваши начальные и конечные теги не совпадают, приведенный выше код будет вам мало полезен.Позвольте мне попробовать еще раз ...
function strbetweenstrs($source, $tag1, $tag2, $casesensitive=true) {
$whatsleft=$source;
while ($whatsleft<>'') {
if ($casesensitive) {
$pos1=strpos($whatsleft, $str1);
$pos2=strpos($whatsleft, $str2, $pos1+strlen($str1));
} else {
$pos1=strpos(strtoupper($whatsleft), strtoupper($str1));
$pos2=strpos(strtoupper($whatsleft), strtoupper($str2), $pos1+strlen($str1));
}
if (($pos1===false) || ($pos2===false)) {
break;
}
array_push($results, substr($whatsleft, $pos1+strlen($str1), $pos2-($pos1_strlen($str1))));
$whatsleft=substr($whatsleft, $pos2+strlen($str2));
}
}
Обратите внимание, что я не проверял это ... но вы получите общее представление.Вероятно, есть гораздо более эффективный способ сделать это.