سؤال

أحاول مطابقة أي طلبات لعنوان URL ليس لديه حرف (/) أو ينتهي بتمديد (.aspx). يمكنني تجاهل القيم والشظايا في التعبير العادي في الوقت الحالي. حتى الآن لدي ما يلي.

^([\w-/]+)(?!\.aspx|/)$

ومع ذلك ، إذا قمت بتشغيل هذا التعبير ، فقد اختار النهائي / في المجموعة التي لا أريد أن تفعلها. الهدف من ذلك هو إلحاق .aspx بعناوين URL التي لم يتم تحديدها باستخدام إعادة كتابة ISAPI ثم إعادة توجيه الطلب إلى محرك .NET.

يوضح المثال أدناه جميع الأحرف في مباراة حالية بالخط العريض

asd.aspx
هذه
شيء. aspx
هذا الاختبار/ (لا تريد النهائي /)
هذا الاختبار/ (لا تريد النهائي /)
هذا الاختبار
هذا الاختبار/ذلك/الاختبار

هل يمكن لأي شخص أن يقترح تعبيرًا لن يختار النهائي / إذا وجدت في التعبير؟

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

المحلول

جرب تأكيدًا للبحث:

^([\w-/]+)(?<!/|\.aspx)$

نصائح أخرى

حرك / خارج المجموعة ():

^([\w-/]+)(?!\.aspx)/?$

الجملة الأولى لا تتطابق مع تعبيرك العادي أو الأمثلة.
يبدو لي أنك تريد:

  1. إذا انتهت السلسلة .aspx لا تعالج أكثر.
  2. وإلا إذا انتهت السلسلة / إزالة هذا القطع.
  3. معالجة السلسلة.

ربما تحاول أن تفعل الكثير مع تعبير منتظم؟

لماذا لا لا تختبر بشكل صريح امتدادك (.aspx) ، وإذا لم يكن لديك ذلك ، فكاكض لعمق القطع الطرفية وإزالته ، قبل المعالجة الإضافية للسلسلة؟

وهذا يعني: أنا متأكد من أنه من الممكن إنشاء تعبير منتظم ، مع Lookahead السلبي ، الذي سيفعل 1 و 2 ، لكن لن يكون من الواضح أن تفعل ذلك بشكل صريح.

قد ترغب أيضًا في اختبار بعض الأمثلة الأخرى:

foo/bar/.aspx
foo/bar.aspx/
foo.aspx/bar
foo.aspx/bar/

فقط للتأكد من أنك تعرف ما تتوقعه كإخراج.

قم بإزالة / من regex وأضفه بالخارج وحدد أنه يمكن أن يكون لها 0 أو 1.

^([ w-/]+) (؟!. aspx) (/) {0،1} $

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