2009-03-05 4 views
2

dayalı bir dize içeriğinizi değiştirin Ben bu gün için RegEx üzerinde çalışıyordum ya da öylesine ben çalıştım veriyorum, böylece istediğim veriyi döndürür. Önce biraz arka plan.Regex.Matches MatchCollection

Kullanıcıların web sayfalarını düzenleyebilecekleri bir içerik düzenleyicim var. Metni biçimlendirebilir, bağlantılar ekleyebilirler, vb. Standart içerik editörü şeyler. Kaydetmeyi tıkladıklarında editör, içeriği (editor.Content) alma ve bir dizeye koyma yeteneği sağlar. Yapmak istediğim şey, herhangi bir bağlantı (<a> etiketi) almak ve iç veya dış bağlantılar olup olmadığını ve PDF dosyaları olup olmadığını öğrenmek. İşte

ben ile geldim İfade: Ben domain ayırmak mümkün duyuyorum, Bununla

<a\b[^<>]*href\s*=\s*[\""\'](?<domain>https?:\/\/[^\/\s\'\""]*)*\/?(?<path>\/?[^\s\""]+?)?[[>\""\'] 

ve yolu dışarı (eğer varsa). Sonra maç üzerinden, ben döngü ...

dim matchColl as MatchCollection = Regex.Matches(editorContent, regExString) 
For Each m as Match in matchColl 
    If m.Groups("domain").value <> myInternalDomain and m.Groups("domain").value <> "" then 
     'this is an external domain... do some stuff 
    End If 
    If m.Groups("path").value.EndsWith(".pdf") then 
     'it is a pdf, do some other stuff... 
    End if 
Next 

Sorum şudur ... Ben parça değerlere 'bazı şeyler', n 'geri gözlerimin içine almak için en iyi yolu olacağını editorContent 'dizesi? Muhtemelen editorContent'i bir StringBuilder'a koyabilirim ve üzerinde bir sürü değişiklik yapabilirim, ama bu çok verimli mi? Örneğin, PDF ile, yeni bir pencerede (target = "_ blank") açılmasını ve harici URL için onclick özniteliğine bazı javascript kodu eklemeyi belirtmek istiyorum.

Herhangi bir fikir harika olurdu!

Teşekkürler!

+1

... [Bu regex HTML ile eşleşir.] (Http://stackoverflow.com/a/1732454/5458362) ... – Riker

cevap

3

Bir Regex.Replace yapmak ve bir MatchEvaluator içinde geçmek istediğinizi düşünüyorum. Temel olarak MatchEvaluator, yedek bir dizgi döndüren bir işlevin temsilcisi.

+0

Mükemmel çalıştı! Aklımda ne kadar güçlü RegEx'ler var ... bu harika! – hacker