2016-11-25 3 views
0

У меня есть семь строк текста. Я хочу использовать PHP для работы ниже.Удалить текст с помощью str_Replace

Прежде всего, я хочу удалить все строки, которые не имеют в них слова «MARCO1998».

Затем, для остальных строк, я хочу, чтобы удалить все для 1-3 чисел после слова «MAP»

А потом, после того, как есть только семь рядов 1-3 цифр слева, за исключением, Я хочу удалить дубликаты.

17.10.16 11:32:39 MAP104 MARCO1998 zerstoert NIGHTRIDER 
17.10.16 14:17:25 MAP66 MARCO1998 zerstoert SPARTACULS 
17.10.16 14:26:15 MAP66 MARCO1998 zerstoert SUPERONE 
17.10.16 23:09:04 MAP104 MARCO1998 zerstoert JOCKSTRAP7 
18.10.16 14:27:45 MAP244 MARCO1998 zerstoert MARIA07 
18.10.16 19:50:37 MAP40 MARCO1998 zerstoert LILIENKILL 
19.10.16 07:08:41 MAP186 KOBOLD1 zerstoert MARCO1998 
+0

StackOverflow не является бесплатным сервисом кодирования, где другие люди пишут полные кодовые решения для вас. Покажите нам, что вы пробовали, и в какой момент вы застряли, и вы можете получить ответ. – Striezel

+0

Итак, не могли бы вы поделиться кодом, который вы уже пробовали? –

+0

@RicardoPontual У меня уже есть ответ – baloonrocket

ответ

0
<?php 
// Input string with newlines 
$str = "17.10.16 11:32:39 MAP104 MARCO1998 zerstoert NIGHTRIDER 
17.10.16 14:17:25 MAP66 MARCO1998 zerstoert SPARTACULS 
17.10.16 14:26:15 MAP66 MARCO1998 zerstoert SUPERONE 
17.10.16 23:09:04 MAP104 MARCO1998 zerstoert JOCKSTRAP7 
18.10.16 14:27:45 MAP244 MARCO1998 zerstoert MARIA07 
18.10.16 19:50:37 MAP40 MARCO1998 zerstoert LILIENKILL 
19.10.16 07:08:41 MAP186 KOBOLD1 zerstoert MARCO1998"; 

// Split long string on newlines 
$str_split = explode("\n", $str); 
$values = []; 

// Loop each line 
foreach ($str_split as $v) { 
    // If the line does not contain MARCO1998, we skip this line 
    if (strpos($v, 'MARCO1998') === false) { 
     continue; 
    } 

    // Use regex to capture MAP<integer>{1,3} 
    preg_match_all('/MAP(?P<id>[0-9]{1,3})/', $v, $matches); 

    // Make sure that the match returned a valid result 
    if (isset($matches['id']) and isset($matches['id'][0]) and strlen($matches['id'][0]) > 0) { 
     $values[] = $matches['id'][0]; 
    } 
} 

print_r($values); // 104, 66, 66, 104, 244, 40, 186 

// If you only like to have the unique values 
$values = array_unique($values); 
print_r($values); // 104, 66, 244, 40, 186 

// Output each ID 
foreach ($values as $v) { 
    echo $v; 
} 
+0

Здравствуйте, удаляет ли это дублирующиеся значения? Извините, я добавил его на свой пост немного поздно. – baloonrocket

+0

@baloonrocket Я отредактировал свой ответ, чтобы отфильтровать дубликаты. Надеюсь, это решает вашу проблему. Пожалуйста, примите ответ, если это произойдет. – OptimusCrime

+0

Спасибо. Еще одна вещь. Я попытался использовать функцию «implode», но это не сработало ... Мне нужно отобразить каждый результат по предыдущему, а не в массиве. Спасибо за вашу помощь. Я приму ваш ответ и как могу дать вам репутацию? – baloonrocket