2011-02-09 21 views
6

kullanıyorum vbs aşağıdaki Normal İfade nesneyi yapmaya çalışıyordum ama bunu yapmak için kolay bir yol bulamadık. Bazı önerilerde bulunabilecek biri var mı?Normal İfade - Bir eşleşme içinde bir eşleşme nasıl bulunur?

Örneğin, "12 < 56> 89" dizgisi var, bu durumda "56" olması gereken "<>" içindeki dizeyi almak istiyorum. Şu anda yaptığım şey, "< \ d +>" ifadesini < 56> döndürecek şekilde bulmaya çalışıyorum. Sonra iki kez işlevi çağırmak gerektiğinden 56.

bu şekilde sevmiyorum dönecektir ilk maçın sonucundan "\ d +" ifadesini bulmaya çalışın. Sadece bir düzenli ifade kullanarak "<>" dizesi içine almak mümkün olup olmadığını merak ediyorum? Teşekkür ederim!

sayesinde Allen

cevap

8

Kullanım ifadesi "< (\ d +)>"

Ardından bir koleksiyon olarak tüm eşleşmeleri erişebilirler. RegEx.Global = True'u ayarlarsanız normal ifadeniz bir kereden fazla eşleşebilir. İlk eşleşme var (0) 'da, ikinci var var (1)' de bulunur. Submatch grupları, (0) .SubMatches (0) vb sadece bir kez yapıyorsanız var bulunurlar yapabilirsiniz tek çizgisi: http://www.regular-expressions.info/vbscriptexample.html

: burada normal ifadeler dışında

Dim RegEx : Set RegEx = New RegExp 
RegEx.Pattern = "<(\d+)>" 
Dim strTemp : strTemp = "12<56>89" 
WScript.Echo RegEx.Execute(strTemp)(0).SubMatches(0) 

Testi

+0

teşekkürler Jeff. Değişken $ 1 grubunu nasıl iade edebilirim? Gerçekten yapmaya çalışıyorum ne sonucundan iki sınır dizeleri hariç iki dizeleri ancak arasında bir dize bulmaktır. "(? <=<)\d+(?=>)" ifadesi göz atıyorum, ancak işe yaramadı. Başka önerileriniz var mı? sayesinde Allen – Allen

+0

Ah, üzgünüm. Cevabım perl içindi. Vbscript için güncellendi –

+0

Çalışır! Yardımın için çok teşekkür ederim, Jeff. Ayrıca, VB'lerin Normal İfadelerini test etmek için bağlantıyı paylaştığınız için teşekkür ederiz. – Allen

3

< (\ d +)> ifadesini kullanın.

Set matches = expr.Execute(text) 
If matches.Count > 0 Then 
    result = matches(0).Submatches(0) 
End If 

Submatches koleksiyonunu kullanarak düzenli ifade yürütün ifadede parantez grupları tekabül dizeleri içerir.

+0

Yardımlarınız için teşekkürler, Tmdean. Submatches koleksiyonunu kullanmayı düşünmedim. Bu mükemmel çalışıyor! – Allen

İlgili konular