2017-01-07 10 views
1

私は与えられたファイル内のすべてのコメントを見つけるためにregexを書こうとしています。私が処理する必要がありますコメントは、私はいくつかの場所で検索し、いくつかの答えを見つけたようにすべてのコメントにマッチする正規表現//、/ * */

/* comments. 
is multiline comment*/ 

または

// one liner comment. 

としてmultyline commnesです。 (one answer)と私は私のニーズのほとんどに答える何かを書くために管理:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|//.*\n?) 

それは、文字列の中にコメントをキャッチする私のコードが間違っている唯一のもの。例えば

String str = " hey, // I'm not a comment " 

私のコードは、「私はないコメント」を得るが、それはいけません。 私はnegativelookaheadやlookbehindなどのいくつかのことを試しましたが、何も動作していないようです。

私は何をしたいのですか?/ ありがとうございます。

編集: 私が使用している言語は(など、考慮にネストされたコメントを取ること)ではなく、パーサーを使用することを検討して、一般のpython

+0

この場合、pythonタグを質問に追加してください。 –

+2

正規表現を使用してプログラミング言語を解析しないでください。ご存知のように、正規表現ではこれを行うことができません。これは厳しい制限です。回避策はありません。とにかくそれを実行しようとするすべてのソリューションは間違っています。 – Tomalak

答えて

1

です。それは(あなたがあなたのプログラミング言語を指定しなかった)それがサポートされます場合は、(*SKIP)(*FAIL)構文を使用することができ、言われている:

"[^"]+"(*SKIP)(*FAIL) 
| 
'[^']+'(*SKIP)(*FAIL) 
| 
(?| 
    //(?P<comment>.+) 
| 
    /\*(?P<comment>[\s\S]+?)\*/ 
) 

a demo on regex101.comを参照してください。

+0

私はPythonで書いています。 私はこの構文を知らないし、あなたのプログラムであなたのコードを使用しようとしていると動作しません(おそらくあなたが別の言語のために書いたからです)。 Pythonにも同様のものがありますか? –

+0

新しい['regex'](https://pypi.python.org/pypi/regex)モジュール(' pip install regex')を使い、上記の正規表現に冗長モードを使います。 – Jan

関連する問題