Сначала, чтобы объяснить, что я новичок в php, и я очень новичок в preg_match и нахожу это запутанным, я пытаюсь найти ключевое слово: exception:, а затем, начиная со следующей строки, вытащите 300 символов
У меня уже есть предварительное совпадение для этого, но я хочу его улучшить, я извлекаю 300 символов из ключевого слова, но проблема в том, что ключевое слово - это имя исключения, а затем в следующей строке - ошибка кода, исключение может быть написан на любом количестве языков, но ошибка кода после исключения не зависит от языка, поэтому я хочу отфильтровать исключение, поскольку оно зависит от языка, поэтому я знаю, соответствует ли исключение 100% при последующем сравнении.
Вот несколько примеров исключения:
Exception: System.Runtime.InteropServices.COMException (0x800401D0): OpenClipboard Failed (Exception from HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Windows.Clipboa
exception: Specified cast is not valid.
Query:Select * from TourneyData where Player_id = 1412
14:14:18.868 [SetCurrentPlayer:12 - DatabaseBase.HandleDatabaseConnectionException] 4: System.InvalidCastException: Specified cast is not valid.
at NpgsqlTypes.NpgsqlTimeStamp.op_I
Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Windows.Forms.Application.ThreadContext.ExitCommon(Boolean disposing)
at System.Windows.Forms.Application.ExitInternal()
at System.Windows.Forms.Application.Exit(C
Итак, как я планирую добраться до ошибки кода, так это отобразить всю информацию в следующей строке, следующей за исключением ключевого слова:
В последнем примере я хотел бы получить следующий результат:
at System.Windows.Forms.Application.ThreadContext.ExitCommon(Boolean disposing)
at System.Windows.Forms.Application.ExitInternal()
at System.Windows.Forms.Application.Exit(C
Хорошо, вот код, который я уже использую для сбора 300 символов после ключевого слова:
// Snippet length constant
define(SNIPPET_LENGTH, 300);
$pos = stripos($body,$keyword);
$snippet_pre = substr($body, $pos, SNIPPET_LENGTH);
Теперь я также использую preg_match в нескольких функциях для извлечения информации, например, в коде есть эта информация журнала поиска:
12:19:42.787 [Main:1 - Bootstrapper.LogSystemInfo] Current culture: it-IT
12:19:42.865 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Name: Microsoft Windows 7 Home Premium
12:19:42.865 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Architecture: 64 bit
12:19:42.865 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Service Pack: Service Pack 1
Это preg_match, только в том числе, поскольку он может помочь различить, как различаются разрывы строк, потому что он улавливает всю информацию из ДО разрыва строки, но я не могу понять, как получить 300 символов ПОСЛЕ разрыва строки:
preg_match('/Current culture: (.*)/', $body, $culture_pre);
preg_match('/Operating System Name: (.*)/', $body, $os_name_pre);
preg_match('/Operating System Architecture: (.*)/', $body, $os_bit_pre);
preg_match('/Operating System Service Pack: (.*)/', $body, $os_service_pack_pre);
Сообщите мне, если вам понадобится дополнительная информация