

VSCode の Remote Development Extension で、Windows 10 上 の VSCode から Linux
サーバにアクセスして開発しています。

サーバ上には Intel のコンパイラがあり、これのエラーメッセージを VSCode で読み取ろうとしていますが、一つも検知できません。

エラーメッセージは今のところ2形式見かけています。

  * エラーコードのないタイプ:
[code]     src/Data.cpp(163): error: class "Node" has no member "local_index_"

    
[/code]

  * エラーコードのあるタイプ:
[code]     src/Data.cpp(82): error #308: member "Node::m_" (declared at line
56 of "include/Node.h") is inaccessible

    
[/code]

これに対して、vscodeのタスク定義の中で、以下のようにproblemMatcherを書いてみていますが、これで一件も検出されません。何がいけない・足りないのでしょうか?

ドキュメントは [Defining a problem matcher | Tasks in Visual Studio
Code](https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-
matcher) を見ながら挑戦しています。

[code]

    {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "cppbuild",
                "label": "C/C++: make all",
                "command": "make",
                "args": [
                    "all",
                ],
                "options": {
                    "cwd": "${workspaceFolder}"
                },
                "problemMatcher": {
                    "fileLocation":"relative",
                    "pattern": {
                        "regexp": "^([^(]+)\\(\\d+\\):\\s+(warning|error)( #\\d+)?:\\s+(.*)$",
                        /* 以下もダメでした */
                        /* "regexp": "^(.*)\\(\\d+\\):\\s+(warning|error)( #\\d+)?:\\s+(.*)$", */
                        /* "regexp": "^([-/._A-Za-z0-9]+)\\(\\d+\\):\\s+(warning|error)( #\\d+)?:\\s+(.*)$", */
                        "file": 1,
                        "line": 2,
                        "severity": 3,
                        "message": 5
                    }
                },
                "group":{
                    "kind": "build",
                    "isDefault": true
                },
            }
        ]
    }
    
[/code]


CC BY-SA 4.0
2021-06-28T06:02:30.747
77829
2021-06-29T00:50:28.583
2021-06-29T00:50:28.583
3060
40200
question
正規表現 vscode
VSCode で Intel コンパイラのエラーメッセージ向けに problemMatcher を書こうとしているがマッチしてくれない


kunif さんのコメントに答えの核心がありました。

私の書いていたものでは、 "(123)" のように、かっこで囲まれた行数の部分を "\\(\d+\\)" というパターンでとらえようとしていました。

しかし、これではあとで数字の部分をマッチした部分文字列（なんて言うんでしたっけ）として取り出せません。取り出せるようにするには、部分文字列の目印のためのカッコが必要なので
"\\((\d+)\\)" と書く必要があったのでした。

目に見えるかっこのことは気にしていましたが見えない方のかっこを忘れておりました。

おかげで通るようになりました！


CC BY-SA 4.0
2021-06-28T11:15:49.397
77837
2021-06-28T11:15:49.397
40200
77829
answer