最初に私がphpに慣れていないことを説明し、preg_matchに非常に慣れていないことを説明し、それが混乱していることに気づきました.私がやろうとしているのは、キーワードを見つけることです:
私はすでにこれのために pregmatch を用意していますが、それを改善したいと思っています。キーワードから 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);
追加情報が必要な場合はお知らせください