SORU
23 EYLÜL 2013, PAZARTESİ


Nasıl {m}{n} ("tam olarak n kez" iki kez) çalışıyor mu?

Yani, bir yol veya başka bir (dalga), \d{1}{2} gibi bir düzenli ifade ile kendimi buldum.

Mantıksal olarak, benim için bir anlamı olmalıydı:

(Bir sayı tam olarak bir kez) tam olarak, yani tam olarak iki katı bir rakam. iki kez

Ama, aslında, ona çok kötü görünüyor "bir sayı tam olarak bir kez" (böylece {2} görmezden).

String regex = "^\\d{1}{2}$"; // ^$ to make those not familiar with 'matches' happy
System.out.println("1".matches(regex)); // true
System.out.println("12".matches(regex)); // false

Benzer sonuçlar {n}{m,n} veya benzeri kullanarak görülebilir.

Peki neden böyle oluyor? Açıkça normal ifade / ifade Java belgelerine bir yerde ya da sadece bir karar Java geliştiriciler-the-fly üzerinde yapılan ya da belki de bir hata mı?

Ya aslında ihmal değil ve aslında başka bir şey demek değil mi?

Önemi çok, ama-bu-yönüyle düzenli davranışları, Rubular beklentim yok değil.

Not - başlık ağırlıklı olarak nasıl çalıştığını bilmek isteyen kullanıcılar için aranabilir olma özelliğini (neden olmasın).

CEVAP
23 EYLÜL 2013, PAZARTESİ


Ben RegexBuddy Java ile düzenli düzenli ifade sözdizimi giriş yaptığınızda, aşağıdaki iletiyi görüntüler

Nicelik tekrarlanan bir belirteci gelmelidir «{2}»

Açıkça bir gruplandırma kullanmak için normal ifade değiştirme ^(\d{1}){2} hata çözer ve beklediğiniz gibi çalışır.


Ben java düzenli ifade motoru sadece ifade/hata ihmal ve bugüne kadar derlenmiş ne ile çalıştığını varsayalım.

Edit

@piet.t's answer 9 *başvuru bu varsayımı destekleyecek gibi görünüyor.

2 düzenleyin(@kudos fncomp)

Bütünlüğü için, genellikle (?:)grup yakalama önlemek için kullanın. Tam düzenli ifade ^(?:\d{1}){2} olur

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • IGN

    IGN

    19 EYLÜL 2006
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006
  • Crossover

    Crossover

    18 HAZİRAN 2007