2

アプリケーションに含まれているファイルと含まれていないファイルをmiに通知する小さなプログラムを作成しようとしています。私はこの正規表現を使おうとしました:

#include (<|")([^\r\n;#">]*)(>|")

それはうまく機能しますが、正しい出力として間違った出力を取得します:

#include <stdio.h"

これはCコンパイラでは不可能です。だから質問は:誰かが私の正規表現を正しく編集する方法を知っていますか?助けてください。

4

3 に答える 3

3
#include (?:<([^\r\n;#">]*)>|"([^\r\n;#">]*)")

したがって、受け入れる代わりに、またはを受け入れ[<"]x[>"]ます。<x>"x"

于 2012-08-11T12:28:59.290 に答える
1

私はさまざまな方法で試しましたが、簡単な方法はないようです。少なくともそれはわかりませんでした。

  1. #include (<|")([^\r\n;#">]*)(\1)
    "cstdio"ええ、それはどちら にとっても本当にうまくいき<cstdio>ます。失敗。
  2. #include (<(?=[^\r\n;#">]*>)|"(?=[^\r\n;#">]*"))([^\r\n;#">]*)(>|")
    ここでは、一致するシンボルによって転送されるかどう<かを確認します。"重い。
  3. #include (<[^\r\n;#">]*>|"[^\r\n;#">]*")
    <...>または がある場合は、両方のケースを確認してください"..."

より良い答えを待って、私も興味があります。私が考えているビット、これはすでにうまくいくでしょう。

PS:ケース2と3[^\r\n;#">]*では、別の文字列に保存して、正規表現の他の部分に連結する方がよいでしょう。

于 2012-08-11T12:41:04.150 に答える
0
#include\s{1,}(<|\")[^(>&\")]*(>|\") 
于 2012-08-11T12:55:15.970 に答える