Regex, kecocokan opsional di url

Saya menghabiskan beberapa jam tanpa hasil yang baik (mungkin suasana hati saya tidak membantu).

Saya mencoba membuat regex untuk membantu saya mencocokkan kedua url:

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

Seperti yang Anda perhatikan di atas, segmen terakhir di url pertama 6 tidak ada di akhir url kedua, karena segmen ini opsional di sini. Jadi saya harus mencocokkan kedua url dalam satu regex, untuk itu, saya sudah mencoba ini:

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

Itu hanya berfungsi dengan baik untuk url pertama. Jadi, membaca beberapa catatan tentang regex, saya menyarankan saya memerlukan simbol ?, bukan? Jadi, saya mencoba yang ini, tetapi tidak berhasil:

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

Yah, aku tidak melakukan kesalahan yang kulakukan.


person manix    schedule 02.04.2013    source sumber


Jawaban (2)


Anda juga ingin meletakkan ? di sekitar /, seperti:

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

Anda dapat melihat kecocokannya dengan benar di debuggex.

person Sergiu Toarca    schedule 02.04.2013
comment
Ya, bekerja dengan sangat baik. Hanya satu pertanyaan, mengapa Anda menempatkan ?: di awal segmen opsional? apakah ini berfungsi sebagai syarat? - person manix; 02.04.2013
comment
Jika ?: ditambahkan tepat setelah tanda kurung, artinya Jangan ambil apa yang ada di dalam grup ini. Saya berasumsi Anda tidak peduli dengan / dan hanya peduli pada nomornya. - person Sergiu Toarca; 02.04.2013
comment
Ya! / tidak disertakan. Terima kasih banyak :) - person manix; 02.04.2013

Yang ini akan berhasil:

reservables/(editar|imagenes)/([0-9]+)/(imagen|editar|actualizar|subir)/([0-9]*)
person Wouter J    schedule 02.04.2013
comment
Saya akan memeriksa ulang dan memberi saran dalam beberapa menit - person manix; 02.04.2013
comment
Ya, saya telah mengujinya dengan beberapa penguji regex dan tidak cocok dengan kedua url - person manix; 02.04.2013