Редактирование текстового файла - удаление ненужных символов - PullRequest
0 голосов
/ 07 января 2020

Я работаю в PHP и понятия не имею, как мне сделать l oop и удалить все знаки> 200 в каждом блоке данных :86: (после :86: и до :61:) в тексте файл.

Текстовый файл выглядит следующим образом:

: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 doesn't matter

: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 doesn't matter

и т. д.

Пожалуйста, помогите мне;)

1 Ответ

0 голосов
/ 07 января 2020

Я бы сделал это в два шага:

, во-первых, найдите все части между: 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:

...