سؤال
في برنامج 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 وإما إزالة سلسلة الاستعلام من النهاية ، أو تسلس الأجزاء التي تريدها.
لا تنتمي إلى StackOverflow