2011-09-23 12 views
6

Aside: Tamam, bildiğim kadarıyla HTML'yi düzenli olarak seçmemeliyim, ama ihtiyaç duyduğum en basit olanı. Ben $ ile dizenin sonuna arıyorum nasılDize regex'in son sürümü .NET'te optimize edildi mi?

Regex BodyEndTagRegex = new Regex("</body>(.*)$", RegexOptions.Compiled | 
    RegexOptions.IgnoreCase | RegexOptions.Multiline); 

Bildirimi:

Bu regex var.

.NET'in normal ifadeleri, dizenin tamamını taraması gerekmeyecek şekilde optimize edildi mi? Değilse, sonunda başlamak için nasıl optimize edebilirim?

+0

garip bir soru gibi görünüyor bıraktı? – Cocowalla

+0

Peki, bunu çok uzun bir dizede yapacağım ve bunu optimize etmenin daha iyi bir yolu olup olmadığını bilmek istiyorum. –

+0

Gerçekten bu sadece LastIndexOf ve Substring’e yapılan aramalardan daha özlü bir şekilde yardımcı olmak için mi? – AakashM

cevap

9

Sen Right-to-Left Mode seçeneği belirleyerek bunu kendisi kontrol edebilirsiniz, ancak düzenli ifade motoru değil optimize otomatik kendisi bir seçenek belirleyerek bunu kendin yap sonu:

:

Ben anahtar nokta olduğuna inanıyoruz

Varsayılan olarak, normal ifade motoru soldan sağa doğru arama yapar.

Arama yönünü RegexOptions.RightToLeft seçeneğini kullanarak tersine çevirebilirsiniz. Arama otomatik olarak dizesinin son karakter pozisyonunda başlar. Regex.Match (String, Int32) gibi bir başlangıç ​​konumu parametresi içeren desen eşleştirme yöntemleri için, başlangıç ​​konumu, aramanın başlayacağı en sağdaki karakter konumunun dizinidir.

Önemli:

RegexOptions.RightToLeft seçenek arama yönünü sadece değiştirir; onlar _wouldn't_ şüphelenmek için herhangi bir neden - o sağa den düzenli ifade deseni yorumlayamaz

+3

Uzun bir dizede OP'nin normal ifadesini kullanarak 10.000 yineleme kullanarak hızlı bir test yaptım. RegexOptions.RightToLeft olmadan 1.950ms, sadece 64ms ile. – Cocowalla

+0

@Cocowalla: çok iyi örnek! – sll

+1

... ve 'Substring' ile birleştirilen' LastIndexOf' kullanımı daha hızlıdır - sadece 15ms. Ama iyi bir neden olmadıkça, okunabilirlik ve süreklilik için regex ile yapışırdım :) – Cocowalla

İlgili konular