سؤال

في برنامج C# ، كتبت وظيفة بحث Google ، والتي تعمل عن طريق جلب المصدر من كل صفحة والحصول على عناوين URL عبر Regex.

regex الفعلي الخاص بي هو:

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

هذا يعمل بشكل جيد في الوقت الحالي ، لكنني أحصل على عناوين URL على سبيل المثال http://www.example.com/forums/arcade.php?efdf=332

أريد فقط أن أحصل في هذه الحالة على عنوان URL بدون ?efdf=332 في نهايةالمطاف.

فكيف يمكنني تغيير regex؟

هل كانت مفيدة؟

المحلول

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

هل نفس الشيء مثل regex (لقد قمت بإزالة الكثير من الرصيف غير الضروري) ولكنك توقف عن مطابقة الرابط قبل أ ?.

في C#:

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

ومع ذلك ، لست متأكدًا من أن هذه طريقة جيدة لمطابقة عناوين URL (ماذا عن https, ftp, mailto إلخ.؟)

نصائح أخرى

يمكنك استعمال ال Uri فئة للوصول إلى أجزاء مختلفة من عنوان URL وإما إزالة سلسلة الاستعلام من النهاية ، أو تسلس الأجزاء التي تريدها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top