2016-04-12 9 views
1

En kısa eşleşmeleri yakalaması gereken bir normal ifadeye sahibim, ancak bu şablonun yuvalandığı durumlarda tembel eşleşme çalışmıyor.Açgözlü olmayan maç hala çok açgözlü

Regex desen:

/{{.*?}}/ 

Örnek dizesi: Burada demek istediğim Yukarıdaki örnekte

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

, ben bu kısa maçları gibi, {{This}} ve {{sentence}} çekmeye bekliyorum ancak bunun yerine {{This}} ve {{an example {{sentence}} elde ediyorum. Açgözlü olmayan maç neden bu kadar açgözlü - ya da niçin yanlış gidiyorum?

+0

'.' herhangi bir karakter, o eşleşmesi neden' ​​{{ 'herhangi biriyle takip eder maçları karakterler, ancak ilk "}}' ye kadar bir satır. –

cevap

6

Şunları deneyin: {{[^{]*?}} Bu, '{' karakterinin iç dizelerde görünmemesi gerçeği kullanılıyor. Beklediğiniz şeyle eşleşiyor.

+0

Teşekkürler @ Cyb3rFly3r, olumsuz bir operatör dikkate almadım. Ben hala% 100 emin değilim, bunun neden olduğunu anlıyorum - açgözlülük her zaman mümkün olan en kısa eşleşmeyi önceliklendireceğini düşündüm - ama aslında bu benim sorunumu çözüyor. – daveruinseverything

0

Sorun şu ki, .* her şeyle eşleşiyor. Sadece {{ ve }} arasında içerik eşleşecek şekilde istiyorsanız, regex aşağıdaki deneyebilirsiniz:

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

Bkz demo at regex101

İlgili konular