2012-01-11 8 views
1

WindowsでLESSプリプロセッサ用のSublime Text 2ビルドシステムでエラーキャプチャを実装しようとしています。パスとエラー行番号を持つファイル名をグループ化した単一の正規表現が必要です。崇高なテキストのためのグループ化を伴う正規表現(rexep)2ビルドシステム

プリプロセッサの出力は以下の通りです:

file_regexオプションは、4つの分野にまでキャプチャするPerlスタイルの正規表現を使用しています。ここでは

ERR: 
    type: Parse 
    message: Syntax Error on line 6 
    index: 131 
    filename: D:\workflow\less-css\test\test.less 
    line: 6 
    extract: asd,}, 
[Finished] 

file_regexオプションの正規表現のガイドラインでありますファイル名、行番号、列番号、エラー・メッセージなど、ビルド・プログラムの出力からのエラー情報を表示します。この情報を取得するには、パターン内のグループを使用します。ファイル名フィールドと行番号フィールドは必須です。

私は最近、正規表現を学ぶようになったので、どんな助けもありがとうございます。再度、regexpは2つのグループ項目を返します - ファイル名にはパスと行番号が含まれています。両方ともプリプロセッサ出力に存在します。

おかげで、 ステファン

答えて

1

私はキャプチャは、あなたがdesccribe順序である必要はありません願っていますか?これは、先読みアサーションを使用して、次の

/message:\s+(.+?)\s*\n.*filename:\s+(.+?)\s*\n.*line:\s+(.+?)\s*\n/s 

は、上記のあなたの例の誤差を考えると、キャプチャはまた

1: Syntax Error on line 6 
2: D:\workflow\less-css\test\test.less 
3: 6 

だろうメッセージ、ファイル名と行番号バッファ1、2へと3をキャプチャしますPHPコードは、私が列番号のプレースホルダとして空のキャプチャを挿入している右の順

<?php 
$err = ' 
ERR: 
    type: Parse 
    message: Syntax Error on line 6 
    index: 131 
    filename: D:\workflow\less-css\test\test.less 
    line: 6 
    extract: asd,}, 
'; 
$re = '/(?=.*filename:\s+(.+?)\s*\n)(?=.*line:\s+(.+?)\s*\n)()(?=.*message:\s+(.+?)\s*\n)/s'; 
preg_match($re, $err, $match); 
print_r($match); 
?> 

ノートで物事を格納します。 'index'ラベルの値が列番号の場合、他のフィールドのキャプチャを複製してテキストを変更します。

OUTPUT

Array 
(
    [0] => 
    [1] => D:\workflow\less-css\test\test.less 
    [2] => 6 
    [3] => 
    [4] => Syntax Error on line 6 
) 
+0

'index'は列数とすることができるように私には発生します。うまくいけば、必要に応じて正規表現を展開してこのフィールドを含めることができますか?各フィールドのパターンは、ラベルテキストを除いて同じです。 – Borodin

+0

残念ながら、注文が重要です。私は今、エラーメッセージをドロップしなければならないと思います。ファイルパスと行番号で十分です。また、この表現を正しくエスケープする方法をアドバイスできますか? config変数に割り当てられているので、Pythonのraw出力は不可能です。 – stefanlous

+0

正規表現の実装で先読みアサーションが許可されている場合、この '/(?=.*ファイル名:\s+(.+?)\s*\n)(?=.*line:\s+(.+?) \ s * \ n)(?=。*メッセージ:\ s +(。+?)\ s * \ n)/ s'は、フィールドを正しい順序で返します。すべてのバックスラッシュを倍にするだけで、式をエスケープすることができます。 – Borodin

関連する問題