Regex การจับคู่ที่ไม่บังคับใน url

ฉันใช้เวลาสองสามชั่วโมงโดยไม่มีผลลัพธ์ที่ดี (บางทีอารมณ์ของฉันอาจไม่ช่วยอะไร)

ฉันกำลังพยายามสร้าง regex เพื่อช่วยฉันจับคู่ URL ทั้งสอง:

/reservables/imagenes/4/editar/6
/reservables/imagenes/4/subir

ดังที่คุณทราบข้างต้น ส่วนสุดท้ายใน URL แรก 6 จะไม่ปรากฏที่ส่วนท้ายของ URL ที่สอง เนื่องจากส่วนนี้เป็นทางเลือกที่นี่ ดังนั้นฉันจึงต้องจับคู่ทั้งสอง URL ใน regex เดียว เพื่อที่ฉันจะได้ลองสิ่งนี้:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]+)

ใช้งานได้ดีสำหรับ URL แรกเท่านั้น ดังนั้น การอ่านหมายเหตุบางส่วนเกี่ยวกับ regex เป็นการแนะนำว่าฉันต้องการสัญลักษณ์ ? ใช่ไหม ดังนั้นฉันจึงลองอันนี้ แต่มันก็ไม่ได้ผล:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]+)?

ฉันไม่ได้ทำอะไรผิด


person manix    schedule 02.04.2013    source แหล่งที่มา


คำตอบ (2)


คุณต้องการวาง ? รอบ / ด้วยเช่นกัน เช่น:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)(?:/([0-9]+))?

คุณจะเห็นว่ามันตรงกันอย่างถูกต้องใน ดีบักเกอร์

person Sergiu Toarca    schedule 02.04.2013
comment
ทำงานได้ดีเยี่ยม มีคำถามเดียวว่าทำไมคุณถึงใส่ ?: ไว้ที่ตอนต้นของส่วนที่เป็นทางเลือก มันทำงานแบบมีเงื่อนไขหรือเปล่า? - person manix; 02.04.2013
comment
หากเพิ่ม ?: ทันทีหลังวงเล็บ หมายความว่าอย่าบันทึกสิ่งที่อยู่ในกลุ่มนี้ ฉันคิดว่าคุณไม่สนใจ / และสนใจแค่ตัวเลขเท่านั้น - person Sergiu Toarca; 02.04.2013
comment
ใช่! / ไม่รวมอยู่ด้วย ขอบคุณมาก :) - person manix; 02.04.2013

อันนี้จะทำงาน:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]*)
person Wouter J    schedule 02.04.2013
comment
ฉันจะตรวจสอบและให้คำแนะนำอีกครั้งในอีกไม่กี่นาที - person manix; 02.04.2013
comment
ฉันได้ทดสอบกับผู้ทดสอบ regex แล้ว แต่มันไม่ตรงกับทั้งสอง URL - person manix; 02.04.2013