2013-06-25 28 views
5

Uygulamam, uzunluğunun değişken olduğu bir barkod alır. 5, 9, 12 veya 14 olabilir. Şunun gibi bir şey kullanmaya çalışıyorum: \w{14}|\w{12}|\w{9}|\w{5}Normal İfadeler (RegEx) - Bir Dize Değişken uzunluğu

Bu normal ifade doğru değil. Farklı uzunluklarda düzenli ifade var mı? veya Farklı normal ifadeleri birleştirmenin doğru yolu nedir?

Not: Normal ifadeler kullanmamın nedeni uzun bir hikaye.

+0

"* Bu normal ifade doğru değil *," onun nesi var? –

+0

Neyi başarmaya çalışıyorsunuz ve çözümünüz neden çalışmıyor? –

+0

Sınır problemi mi? Deneyin: '^ \ w {14} | \ w {12} | \ w {9} | \ w {5} $'. – Pragmateek

cevap

3

Büyük olasılıkla bu istedik:

"^(\w{14}|\w{12}|\w{9}|\w{5})$" 

Bildirim farklı uzunluk seçenekleri gruplama, başından çevrili ve dize göstergelerinin biten. Bunlar olmadan, \w{5} dizesinde bir yerde varsa herhangi bir şey eşleşir.

+1

note \ w, _ –

5

Bu sizin için mi arıyorsunuz?

\b(\w{14}|\w{12}|\w{9}|\w{5})\b 

Regular expression image

Ya 14, 12, 9 veya 5 karakter uzunluğunda olduğunu da dize içinde tüm kelimeleri eşleşir. Daha sonra bu eşleşmeleri kontrol edebilirsiniz. Birkaç eşleşme ve eşleşme içermeyen bir dize bakın: http://www.debuggex.com/r/V9T8nHp7ep6yuJow

Yalnızca tüm dizenin tek bir eşleşme olduğunu kontrol etmeyi umuyorsanız, bunu kullanın (her ikisinin de seçeneklerden biriyle başlayıp bitip bitmediğini kontrol etmek için)): Ayrıca

^(\w{14}|\w{12}|\w{9}|\w{5})$ 

, gördüğüm tüm barkodlar sadece rakamlardan oluşur

, değiştirmek gerekir ... Bu sizin için de geçerlidir tüm [0-9]

aynıdır \d ile \w
+0

dahil olmak üzere yalnızca bir z, A-Z, 0-9 şeklindedir. Dizede boşluk varsa, bu başarısız olabilir. Örn: "abc 12345", 'eşleşebilir' olabilir, ancak orijinal posterin niyet ettiği şeyden kuşkuluyum. –

+1

Aldığınız dizgiyi varsaymak, bu yöntemin "djd 12345 ,,," ile eşleşmesi için^$ yöntemini kullanmanızı önerdiğim tüm koddur. 12345 5 basamaktır ve \ w {5} ile eşleşir ve bir sözcük içinde olur sınır. –

+0

Evet, 12345 dizede bir eşleşme olurdu. Kullanıcı, test dizisindeki eşleşmeleri inceleyebilir - yukarıdaki bağlantıdaki örnekte olduğu gibi. Sanırım kullanıcının düzenli ifadeyi nasıl uygulayacağını tam olarak bilmiyorum - bu gereksinimi değiştirebilir. – smerny