2011-07-18 26 views
7

二重中括弧の中のすべてを文字列に一致させようとしています。一致するJava正規表現{{二重中括弧内の文字}}

\{\{.*\}\} 

いくつかの例:私は、次の式使用しています

The {{dog}} is not a cat.これは正しく一致したが、{{犬}}しかし


The {{dog}} is a {{cat}}は、最初に一致した後、すべての代わりに返すと一致します2つの試合。 {{dog}}に1回、{{cat}}に1回2回マッチさせたいです。

これを行う方法は誰にも分かりますか?

ありがとうございました。

\{\{.*?\}\} 

は、中括弧の間のすべてを一致させるために、使用:

+1

Regexは貪欲アルゴリズムを使用しています(したがって、一致するように大きな文字列を取得したい)。それが助けてくれるのですか、それとももっと必要としますか? – rajah9

+0

これは仕事\ {\ *。\} \} – DaMainBoss

+0

を受け取りますあなたが答えた場合は、あなたを最も助けてくれた – RMT

答えて

7

貪欲.*がありますので、とき、(改行を除く)のものと一致しました文字列に}}が複数ある場合は、最後に}}と一致します(\r\nが2つの間にない場合は、}}!)。

は、このような(ungreedy)消極的.*一致するようにしてください:正しいのです

\{\{.*?}} 

を、あなたは}をエスケープする必要はありません。

また、行うことができます:

\{\{[^}]*}} 

{{ ... }}は単一}自体を含めることができない場合。あなたが必要なもの

1

あなたは非欲張りマッチを使用する必要が

\{\{(.*?)\}\} 
0

は「非欲張り」修飾子です - ので、あなたの正規表現は、私はあなたが持っているパターンが貪欲であるからだと信じている\{\{.*?\}\}

で試してみてください\{\{.+?\}\}

5

です。

​​は非常によく説明しています。

関連する問題