سؤال

مرحبا، أحتاج إلى بعض المساعدة.

هنا هو رمز Preg_Match الحالي:

preg_match("/(\/)([0-9]+)(\/?)$/", $_SERVER["REQUEST_URI"], $m);

التي تفعل وظيفة جيدة في الكشف عن post_id في سلسلة URI التالية:

http://www.example.com/health-and-fitness-tips/999/

أعتقد أنه يجب أن يكون خلفية كافية.

أنا أغير 999, ، ال post_id, ، ل how-do-I-lose-10kg-in-12-weeks', thePost_title`، وتحتاج إلى تغيير Pre_Match Regex للكشف عن السلسلة الجديدة.

كان من الفكر الأول هو إضافة [AZ] - إلى نهاية Regex مما يجعل Regex التالية:

"/(\/)([0-9][a-z]/-+)(\/?)$/"

ربما هذا بسيط؟ إذا لم يكن الأمر كذلك، فما الخطأ في ما ورد أعلاه؟

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

المحلول

ليس تماما: ([0-9][a-z]/-+) هو "عدد، تليها خطاب، تليها اندفاعة واحدة على الأقل."

انت تريد ([-0-9a-z]+).

نصائح أخرى

أود فقط استخدام \w:

preg_match('!/([-\w]+)/?$!', $_SERVER['REQUEST_URI'], $m);

من فئات الأحرف أو مجموعات الأحرف:

\w يقف ل "حرف كلمة"، وعادة [A-Za-z0-9_]. وبعد لاحظ إدراج السفل والأرقام.

\w تقف للكلمة، يمكن أن تكون حرفا كلا الحالة العلوية والحالة الأدنى A إلى z و z، رقم 0 إلى 9 أو _. لا يعادل [A-Za-z0-9_]. وبعد يمكنك اختبار في اختبار الانترنت هنا.

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