Я бы сделал это в два шага:
, во-первых, найдите все части между: 86: и: 61: - для этого я обычно использую шаблон регулярных выражений со взглядом сзади (?<=)
и взглядом вперед (?=)
вот так:
// your source text
$source = ':86: I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here
:61:20010301034578997d Some text not interested here doesnt matter
:86: I xwant to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here I want to leave only 200 signs here
:61:20010301034578997d Some text not interested here doesnt matter and so on Please help me ;)';
// search for the parts between :86: and :61:
preg_match_all('/(?<=:86:)(.*?)(?=:61:)/is',$source,$matches);
имейте в виду, что в вашем тексте есть новая строка перед: 61: - эта новая строка также будет удалена, так как она является символом и превышает порог в 200 символов
теперь у вас есть массив со всеми совпадениями ($matches
) - вы можете использовать его для замены его обрезанными версиями текста.
foreach ($matches[1] as $match) {
$source = str_replace(':86:' . $match . ':61:',':86:' . substr($match,0,200) . ':61:',$source);
}
Как видите, я все еще используйте: 86: &: 61: при замене текста - это потому, что тот же текст, который был найден между этими двумя, также может встречаться где-то еще, и мы хотим заменить его только между: 86: и: 61: