2016-04-18 3 views
-1

Привет, У меня возникла проблема с фильтрацией определенных строк из текстового файла. Когда я запускаю программу, создается текстовый файл с сообщением об ошибках, связанных с проверкой файла. Однако мне нужно игнорировать некоторые ошибки генерируются, в основном, те, с импортированными или не найден в пути поиска в описании ошибки, как те ниже:Отфильтровать определенные строки из текстового файла с PHP

static-state.y:8: error: module "inet-types" not found in search path 
mpls-static-state.y:11: error: module "y-types" not found in search path 
mpls-static-state.y:11: warning: imported module y-types not used 
mpls-static-state.y:15: error: module "context-state" not found in search path 
mpls-static-state.y:15: warning: imported module context-state not used 
mpls-static-state.y:19: error: module "contexts" not found in search path 

Там будут и другие сообщения об ошибках, которые мне нужны, так что я могу 't полностью очистить файл, также я читаю текстовый файл и отображаю эти ошибки на веб-странице. Я прочитал из этого файла:

if(file_exists("stderr.txt")){ 
    $fh = fopen("stderr.txt", 'r'); 
    $errorOutput = fread($fh, 25000); 
} 

Затем я использую $ errorOutput для хранения того, что находится в текстовом файле. Какой был бы лучший способ фильтрации строк ошибок, которые я не хочу отключать? Старался создать регулярное выражение, но не получив удачи в его работе, кто-нибудь может помочь?

+0

Командная строка да или нет? Платформа? Критерий выбора? В окне linux я бы просто использовал _grep_. – syck

+0

Привет, это работает на windows, текстовый файл создается из запуска сценария bash. PHP используется для чтения текстового файла из того места, где оно было создано. Мне нужно удалить сообщения об ошибках, которые мне не нужны из текстового файла, используя PHP, сохраняя те, которые мне нужны. – olliejjc16

+1

Вы можете использовать якоря ('^ $'), с модификатором 'm', и это сломает поиск по каждой строке. Затем просто используйте 'preg_replace' с регулярным выражением, которое соответствует строкам, которые вам не нужны. В качестве альтернативы' grep' с флагом 'v' игнорирует найденные совпадения. – chris85

ответ

1

Это может быть достигнуто с якорей и lookaheads:

^(?:.(?!(?:not found)))+$ 
#^- match the beginning of the line 
# (?:.) - match any character except a newline 
# (?! - negative lookahead 
# $ - end of the line 

См a demo on regex101.com (ум модификатор multiline!).

Смежные вопросы