2010-11-21 30 views
0

C# programımda her sayfanın kaynağını alıp regex ile URL'leri alıp çalıştıran bir Google Arama İşlevi yazdım.URL C için Normal İfade #

Benim asıl Regex geçerli:

(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+) 

Bu anda iyi çalışır, ancak ben sadece en ?efdf=332 olmadan bu durumda URL almak istiyorum http://www.example.com/forums/arcade.php?efdf=332

gibi örnek URL'ler için olsun son.

Normal ifadeyi nasıl değiştirmeliyim?

+0

Merhaba Omegavirus, Yığın Taşması'na hoş geldiniz. Normal ifadenizi doğru bir şekilde biçimlendirmek için çok fazla sorun yaşadığınızı fark ettim, ancak çok daha kolay olabilirdi. Sadece orijinal normal ifadeyi yapıştırın, işaretleyin ve Ctrl-K tuşlarına basın. Bu, metni usta metin olarak biçimlendirir (HTML 'pre' etiketi gibi). Hatalar için çok daha az potansiyel. –

+0

oh bunu bilmedim, teşekkürler;) ve regex benim C# programımdan çıktı, böylece \ 'kaçtı. Bunu söylemeyi unuttum. – Omegavirus

+2

C# 'da, sözdizimi dizelerini ('@" foo "') normal ifadelerle kullanın. O zaman ters eğrilerinden kaçmak zorunda değilsin. Aksi halde delirirsin. Regex zaten okumak için yeterince zor ... –

cevap

1
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+ 

(gereksiz cruft çok kaldırdık) senin regex olarak aynısını yapar ama ? önce bir bağlantı eşleştirme durur. Bu eşleşen URL'lerin böyle iyi bir yol olduğundan emin değilim, dedi

Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+") 

+0

çok teşekkürler;) https vs hiçbir sorun neden onlara ihtiyacım yok .. http is all :) sadece regex ve onun neredeyse çalışıyor. ama şimdi bunları nasıl filtrelemek için http://www.blabla.com/forums/&blabla gibi URL'ler alıyorum? – Omegavirus

+0

Yani herhangi bir parametresi olmayan domain + yolunu mu istiyorsunuz? –

+0

tam olarak ne istediğim;) – Omegavirus

0

(? https, ftp, mailto vs. hakkında ne) Sen kullanabilirsiniz: C# '

URL'nin çeşitli bölümlerine erişmek için Uri sınıfı ve sorgu dizesini sondan kaldırın veya istediğiniz parçaları birleştirin.