2015-11-12 43 views
6

son karakterini kullanılmasın: harika çalışıyor ama belli ki o da son % sonraki karakteri vurgularAşağıdaki regex var regex maç

%(?:\\.|[^%\\ ])*%([,;\\\s]) 

.

Bunu regex'ten nasıl çıkartabileceğimi merak ediyordum?

The files under users\%username%\desktop\ are: 

O %username%\ vurgular ama sadece %username% istiyorum: Ben Örneğin

. Böyle regex bırakırsanız Öte yandan,:

%example1%example2%example3 

Herhangi fikri dışlamak nasıl:

%(?:\\.|[^%\\ ])*% 

... o zaman ben istemiyorum bu modeli maç olacak Maçtaki son karakter bir regex ile mi? Bir şey yakalamak değil 0 width assertion burada gerek .Ne

+0

Yeni RegEx ile bir çözüm buldum ... bunu çok erken yayınladığım için üzgünüm! Bu ihtiyacım olanı yapar ... '% (?: \\.| [^ "% \ d \\]) *%' – user3587624

+0

Bu regex, bir niceleyici uygulanmış bir dönüşüm grubunuz olduğu için etkili değildir. Sorun değilse (kısa dizeleriniz varsa) Tamam. Eğer biraz daha uzun olabilirlerse, onu açmanız gerekir. [Bu demo] 'ya bakın (https://regex101.com/r/aM2cY3/1) - 6 adım vs 30. –

cevap

3
%(?:\\.|[^%\\ ])*%(?=[,;\\\s]) 

        ^^ 

bir lookahead kullanın.

1

Halihazırda kullandığınızdan daha etkili bir normal ifadeyi kullanabilirsiniz. Dönüşüm bir niceleyici ile birlikte kullanıldığında, gereksiz geri dönüşler söz konusudur.

Sahip olduğunuz dizeler kısasa, kullanmanız uygun olur. Ancak, biraz daha uzun olabilirlerse, ifadeyi "açmanız" gerekebilir. İşte

nasıl yapıldığını geçerli:

%[^"\\%]*(?:\\.[^"\\%]*)*% 

Regex döküm:

  • % - başlangıç ​​yüzde işareti
  • [^"\\%]* - unrolled desen başlangıcı: Bir 0'dan veya daha fazla karakter diğer çift ​​tırnak işareti, ters eğik çizgi ve yüzde işareti
  • (?:\\.[^"\\%]*)* - 0 veya daha fazla satır ...
    • \\. - arka yüzde işareti
    • - bir çift tırnak, ters bölü ve yüzde işareti
  • % daha 0 veya daha fazla karakter diğer -
  • [^"\\%]* bir satır dışında herhangi bir karakter ve ardından bir hazır eğik çizgi

Bkz. this demo - 6 adım vs %(?:\\.|[^" %\d\\])*% ile 30 adım.

+0

Lütfen cevabımı kontrol edin, umarım regex'i daha fazla anlamanıza yardımcı olacaktır [Regex'te döngüyü nasıl açacağınız hakkında daha fazla bilgiyi burada bulabilirsiniz] (http://www.softec.lu/site/RegularExpressions/UnrollingTheLoop). İyi günler. –