2017-10-23 17 views
1

私はregexを使って特定のパターンをより簡単なものに置き換えています。括弧間に一致する正規表現

2つのカッコの間から空白をすべて取り、キャプチャグループで使用する必要があります。ただし、かっこの間の文字は括弧で囲むこともできます。

は、ここで私が一致するようにしようとしています何の2つの例です:

.message("vel pharetra est urna eget justo. Nunc in dignissim velit. {} " 
     + error.getMessage().getProperty()) 
.build().log(); 

.message("Key : " + oldEntry.getKey() + " and Value: " + oldEntry.getValue()) 
    .build() 
    .log(); 

私の現在の正規表現:メッセージにそこカッコれていないとき\.message\(([\S\s]+?)\)[\S\s]*?((\.log\(\))|(\.build\(\)))\;

それは単純なパターンにマッチします。しかし、括弧がある場合、最初の閉じ括弧でキャプチャグループを停止します。私は+?を使用しているのでこれが正しいと確信していますが、検索を続行するように指定する方法がわかりません。

私はいくつかの例でこの正規表現を作成しました。 http://regexr.com/3h15u

+0

ラングを記入してくださいuage。 – Utkanos

+1

あなたの2つの例では、どのように一致させたいですか? 'message'の引数、' .message'から 'log()'までのすべてのものですか? –

+0

Imは表面的に見ていますが、MDNによれば、使用していますか? *、+、?、または{}の後にキャプチャグループが非対応になります。 – slackOverflow

答えて

4

あなたは、この正規表現を使用することがあります。()

\.message\((?s)(.+?)\)\s*(?:\.(?:log|build)\(\)\s*)+\s*; 

テキストは、キャプチャグループ#のJavaの使用で1

RegEx Demo

に捕獲されている:

final String regex = "\\.message\\((?s)(.+?)\\)\\s*(?:\\.(?:log|build)\\(\\)\\s*)+\\s*;"; 
+0

これはメッセージの引数と正しく一致していますが、最後に.logまたは.buildをマッチさせてください。(直前に見つかった場合は停止します。)置き換えるためにはすべてを一致させる必要があります。 – scottm

+0

ok今更新された正規表現を確認してください – anubhava

+1

恐ろしく、regex101はおそらく私のデフォルトツールになるでしょう、ありがとう! – scottm

関連する問題