2016-03-20 16 views
6

, görüyorum ki açgözlü ve isteksiz formları hem sahiptir X{n} tam niceleyici:fark? Java <a href="https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html"><code>Pattern</code></a> sınıf için belgelerinde

Açgözlü nicelik

  • X {n} X, tam n kere
  • ...

quanti isteksiz fiers

  • X {n}? X, tam n kere
  • ...

dokümantasyon açgözlü ve isteksiz davranışları arasındaki farkın genel örnekler verir ama kesin Nicelik herhangi örnekler vermez.

İlk başta "Belki fark X kendisi fark şekillerde eşleşebilir olmasıdır." Diye düşündüm Ama o zaman X kendi açgözlü/isteksiz belirleyicileri içerebiliyor, ve yeterince test ettim ve bu bir fark değil (greedy vs reluctant).

, her iki durumda da, tam olarak n kez maç için gidiyor göz önüne alındığında, iki davranış arasında bir fark var mı? değişken uzunluk uyumu elde olduğunda hırslı vs isteksiz

+0

'x {2} '=' x {2}? '. Birincisi daha kısa - tüm fark budur. –

cevap

5

sadece mantıklı; İsteksiz bir niceleyici, mümkün olan en küçük ile eşleşecek ve maksimum açgözlü olacaktır.

Sınırlı miktardaki davranışı ayırt etmek için, aralığı olmalıdır, yani miktar farklı minimum ve maksimum olmalıdır. Örnek olarak: Giriş 1234567 Verilen

, yakalanan grupları şunlardır:

(\d{2,3})(\d+) -> (123)(4567) 
(\d{2,3}?)(\d+) -> (12)(34567) 

sadece sabit bir miktar olduğunu, örneğin bir ? ekleyerek davranışında hiçbir fark yoktur \d{2}.

+0

Bu harika bir yanıt gibi geliyor, ancak bunu destekleyen herhangi bir belgeyi biliyor musunuz? her durumda – Owen

+0

soru işareti * "mümkün olduğunca önceki miktar az ama yine de maç olarak" anlamına isteksiz * maçı anlamına gelir. Bu durumda, genel olarak bir maç oluşturabilen '{2,3}' aralığındaki en küçük miktar '2' dir. – Bohemian