2012-01-28 16 views
29

Kelimeleri eşleştirecek şekilde sözcükleri eşleştirmek için normal ifadeyi bilmek istiyorum. Örneğin, bir kelime en fazla 10 karakter uzunluğundaysa, normal ifadenin eşleşmesini istiyorum, ancak uzunluk 10'u aşarsa, normal ifadeyle eşleşmemelidir. Belirli bir uzunluğa ait sözcükleri eşleştirmek için düzenli aralık

Ben
^(\w{10})$ 

çalıştı ama bu beni kelimenin minimum uzunluğu 10 karakterdir yalnızca maçları getiriyor. Sözcük 10 karakterden fazlaysa, hala eşleşir, ancak yalnızca ilk 10 karakterle eşleşir.

+0

Sadece kelimeler üzerinde yineleme yapmak ve 'String.length()' işlevini kullanmak istememenizin bir nedeni var mı? – MAK

+1

Evet. Bu dize, çeşitli biçimlerin sözlerini içeren büyük bir dizenin parçasıdır - tarihler, e-postalar, URL'ler vb. Tümü sekmeyle ayrılmış biçimde. Bütün çizgiyi birleştirmek için kompozit bir regex yazmayı düşünüyorum. –

+0

Anladım. Sözcükler sekmelerle sınırlandığından, bunları (String.split() 'veya' StringTokenizer' kullanarak) bölmek ve sonra her bir kelime uzunluğuna bakmak mümkün değil mi? – MAK

cevap

39

Bence \w{1,10}\b. \b, bir sözcük sınırıyla eşleşiyor.

Tabii ki \b'u da değiştirebilir ve ^\w{1,10}$'u yapabilirsiniz. Bu, dizenin tek içeriği olduğu sürece en fazla 10 karakterle eşleşecektir. Bence daha önce yaptığınız buydu.

Java olduğundan, ters eğik çizgiden kaçmak zorunda kalacaksınız: "\\w{1,10}\\b". Bunu zaten biliyordun, ama daha önce beni aldım. Eşleştirilecek karakterlerin uzunluğu.

+0

Teşekkürler. Eminim kaçış beni daha önce de almıştı.: 0 Sağladığınız ifade, 10 kelimeden büyükse 10 karakterle eşleşir. Sözcük 10 karakteri aşarsa eşleşmesini istemiyorum. \ W {10,} 'un tersi sayılabilir ...! –

+1

@AnandHemmige: Hangi ifade? Sözcükte 10 karakterden fazlası varsa, bir '\ b' olanı bir şeyle eşleşmemelidir. Aynısı, $ 'daki biten için de geçerlidir. Eğer dize sadece bir kelime ise ikincisini denemelisiniz. –

+1

VI sürümümde (Windows için gvim) Çalışmak için bunun için önce bir ters eğik çizgi (\\) gerekir. –

25
^\w{0,10}$ # allows words of up to 10 characters. 
^\w{5,}$ # allows words of more than 4 characters. 
^\w{5,10}$ # allows words of between 5 and 10 characters. 
+0

Bunlardan birincisinin, \ w {10,} 'ın bir çeşit zıtlığı olarak çalışacağını umuyorum ama değil. –

+3

'^' ve '$' regex dizesinin başlangıcına ve sonuna sabitleyin. Eğer eşleştirmeler (belirli bir uzunluğa sahip kelimeler) ayıklamak isterseniz, o zaman sözcükleri sınırlamak için '\ b' sözcüğünü kullanmanız gerekir: '\ b \ w {1,10} \ b' 1 uzunluğundaki kelimeleri bulur 10. –

14

Varsayılan olarak, bu model eşleşmek için motor açgözlüdür. Örneğin, giriş 123456789 ise, \ d {2,5}, uzunluk 5 olan 12345 eşleşecektir.

2 uzunluğunun eşleştiğinde motorun geri dönmesini istiyorsanız, \ d {2,5} kullanın.

+1

Bu, x'den daha büyük sözcükler bulmak için normal ifadeyi aradığım için kullanışlıdır. – Zenil

İlgili konular