2016-04-12 10 views
1

私は最も短いマッチをキャプチャする必要がある正規表現パターンを持っていますが、そのパターンがネストされている場合はレイジーマッチが機能しません。ここで私が何を意味するかです:まだ貪欲でない一致は依然として貪欲です

正規表現パターン:

/{{.*?}}/ 

例文字列:上記の例で

{{This}} is {{an example {{sentence}}}} 

、私はこれらが最短一致しているとして、{{This}}{{sentence}}を引くことを期待しています、代わりに私は{{This}}{{an example {{sentence}}を得ています。なぜ非貪欲な試合がまだ貪欲であるのか - むしろどこが間違っているのか?

+0

'.'任意の文字は、それはあなたが一致する理由を' {{ 'いずれかに続いて一致しました最初の '}}'までの改行があります。 –

答えて

6

試してみてください:{{[^{]*?}} これは、 '{'文字が内側の文字列に表示されてはいけないという事実を利用しています。それはあなたが期待しているものと一致します。

+0

ありがとう@ Cyb3rFly3r、私は負の演算子を考慮しませんでした。私はまだこれが起こっている理由を理解していると100%は確信していません - 私は非欲張りは常に最短の利用可能なマッチに優先順位をつけると思ったが、実際にはこれが私の問題を解決する。 – daveruinseverything

0

問題は、.*がすべてと一致するということです。あなただけ{{}}間でコンテンツを一致させたい場合は、正規表現次試すことができます。

\{{2}[^\{]*?\}{2} 

参照のデモat regex101