2016-05-22 24 views
1

非常に大きなCプロジェクトをリファクタリングしているので、特定のプログラマーが作成したコードの一部を探す必要があります。 幸いにも、このプロジェクトに携わっているすべての人は、電子メールアドレスを標準のCスタイルのコメントで使用して自分のコードをマークします。regex:2つの文字列の間のテキストを特定の単語に一致するテキストで抽出する

これはコマンドラインのgrepで簡単に達成できると言えるかもしれませんが、これは私の目標ではありません。このコメントを削除するか、他のテキストに置き換えてregexを唯一の解決策にする必要があります。

Ex。 this postから

/********************************************* 
* 
* ... some text .... 
* 
* author: [email protected] 
* 
*********************************************/ 

私は、Cスタイルのコメントを検索するには、右の式が見つかりました:

\/\*(\*(?!\/)|[^*])*\*\/ 

しかし、それは十分ではありません!私は特定の電子メールアドレスを含むコメントだけが必要です。幸いにも、私が探している電子メールアドレスのドメインは、プロジェクト全体で一意であるように見えるので、これにより簡単になります。私はいくつかの肯定先読みアサーションを使用しなければならないと思います

は、私はこの1つ試してみた:

(\/\*)(\*(?!\/)|[^*](?=.*domain.com))*(\*\/) 

を、それは実行されません! アドバイスはありますか?あなたが使用することができます

+0

[ '\/\ * [^ *] *(:??!\ *(\ /)[^ *] *)* @ドメイン\ .COM [^ *] *(?:\ *(?! \ /)[^ *] *)* \ * \/'](https://regex101.com/r/nW8uP2/1)? –

+0

'\/\ *。* author:。* @ domain \ .com。*?\ * \ /'は一致する必要があります。 – Saleem

+0

@Saleemは、[それは炊きます](https://regex101.com/r/mV2bU2/1)、 'に依存しないでください。*'あなたはマークアップされたテキスト内の一致を扱うとき。あなたが正しいWiktorStribiż[email protected] –

答えて

0

\/\*[^*]*(?:\*(?!\/)[^*]*)*@domain\.com[^*]*(?:\*(?!\/)[^*]*)*\*\/ 

regex demo

パターンがの詳細を参照してください:

  • /\*から*/
  • 0123以外のすべて -
  • [^*]*(?:\*(?!\/)[^*]*)*を開始コメント
  • @domain\.com - リテラルdomain.com
  • [^*]*(?:\*(?!\/)[^*]*)*から*/
  • \*\/以外のすべて - 最初の部分はコメント終了語以外のすべてを探してされるように(速い代替エンド

コメント@domain ):

\/\*[^*@]*(?:\*(?!\/)[^*@]*|@(?!domain\.com)[^*@]*)*@domain\.com[^*]*(?:\*(?!\/)[^*]*)*\*\/ 

S ee another demo

これらのパターンでは、(\*(?!\/)|[^*])*のための展開されていない構成を使用しました:[^*]*(?:\*(?!\/)[^*]*)*Unrollingは、より効率的なパターンを構築するのに役立ちます。

関連する問題