2012-07-12 17 views
9

Çözmek için bir sorunum var. Aslında, normal ifadelerin bunu yapıp yapamayacağını bilmiyorum, ancak bir şablonun sonunda n sayıda karakterle eşleşmem gerekiyor. örn. blahblah [A-Z] {n} Sorun, bitiş aralığına uyan karakterlerin hepsinin aynı olması gerektiğidir., aynı bilinmeyen karakteri aynı defa eşleşiyor

Mesela ben

  • blahblahAAAAA
  • blahblahEEEEE
  • blahblahQQQQQ

ancak

  • blahblahADFES eşleştirmek istediğiniz
  • blahblahZYYYY

Bunu yapabilen bazı düzenli ifade var mı? Bu durumda ([A-Z]) yılında blahblah([A-Z])\1+

\1 birinci yakalama grubuna bir geri-referans şöyledir:

+0

Bu soruya bakın: http://stackoverflow.com/questions/7147810/regular-expression-same-character-3-times – Palladium

+0

Yanıtlar için teşekkürler, bu harika çalışıyor –

cevap

18

Bu desen kullanabilirsiniz. Ve + bu karakteri bir veya daha fazla kez eşleştirecektir. Sınırlamak için,'u, \1{3}1 gibi üç kez eşleştirecek şekilde {n} kullanarak belirli sayıda tekrarla değiştirebilirsiniz. eşleşmesini tüm dize gerekiyorsa

sonra desen Sen back-references here hakkında daha fazla bilgi bulabilirsiniz ^blahblah([A-Z])\1+$

olur böylece sırasıyla ^ ile öneki ve $ ile sona emin olun. Neredeyse tüm dil lezzetlerinde çalışmalıdır.

0

blahblah(.)\1*\b. (.) bir şeyden birini yakalar, daha sonra \1* eşleşir (ilk eşleşme) ile herhangi bir sayıda kez.

2

Çoğu normal ifade uygulamada, bunu normal ifadenizdeki bir yakalama grubuna referans vererek gerçekleştirebilirsiniz. senin Örneğin, aynı büyük harf karakteri beş kez maç için aşağıdakileri kullanabilirsiniz: Regex n kez maç için

blahblah([A-Z])\1{4} 

Not, sen yakalama grubundan gelecek bir maç beri \1{n-1} kullanmak gerekir.