Mengapa tidak menggunakan pokok untuk menyimpan alamat penghalaan? Seperti yang ditunjukkan dalam gambar, setiap kotak ialah Peta Apabila anda meminta /user/111/profile/books/222, pecahkan url itu dahulu ['/' , '111' , 'profile' , 'books' , '222'] Cari pertama jika terdapat / nod dalam lapisan pertama Kemudian cari jika terdapat 111 nod dalam lapisan kedua , jika tidak, masukkan * nod dan kemudian semak jika terdapat nod profil pada lapisan ketiga yang anda cari, dan seterusnya
Fleksibiliti yang dipaparkan oleh ungkapan biasa dalam penghalaan sukar untuk digantikan dengan teknologi lain. Anda juga boleh menggunakan peraturan biasa untuk mengoptimumkan prestasi Prinsipnya sangat mudah Gabungkan peraturan biasa dan gunakan strategi tertentu untuk menentukan
yang mana berdasarkan hasil padanan biasa.
Sebagai contoh, ada
/pengguna/{pid}/profil
/berita
/produk/{pid}
/produk/{pid}/komen/{cid}
Empat laluan
Gunakan ungkapan biasa #^(?|/user/(d+)/profile|/news|/product/(d+)()|/product/(d+)/comment/(d+)())$# untuk memadankan
Apabila hasil tangkapan masing-masing termasuk 1, 0, 2, dan 3 kumpulan, kita tahu bahawa laluan pertama hingga ke-4 telah dipadankan masing-masing. Melalui beberapa kod untuk menggabungkan peraturan biasa secara automatik dan menetapkan bilangan kumpulan tangkapan => pemetaan penghalaan, berbilang peraturan biasa boleh digabungkan bersama untuk satu perlawanan
Berikut ialah helah untuk digunakan (?|) untuk menetapkan semula kumpulan tangkapan
Mengapa tidak menggunakan pokok untuk menyimpan alamat penghalaan?
Seperti yang ditunjukkan dalam gambar, setiap kotak ialah Peta
Apabila anda meminta /user/111/profile/books/222, pecahkan url itu dahulu
['/' , '111' , 'profile' , 'books' , '222']
Cari pertama jika terdapat / nod dalam lapisan pertama
Kemudian cari jika terdapat 111 nod dalam lapisan kedua , jika tidak, masukkan * nod
dan kemudian semak jika terdapat nod profil
pada lapisan ketiga yang anda cari, dan seterusnya
https://github/bephp/router
Projek ini tidak menggunakan ungkapan biasa, tetapi memotong URL mengikut "/" dan menyimpannya ke dalam struktur pokok.
Apabila memetakan laluan, ia bersamaan dengan melintasi pokok, dan kerumitannya ialah O (log n).
Projek ini dilaksanakan dalam PHP, tetapi kodnya sangat kecil. Ia sepatutnya mudah difahami.
Mengapa Dict penghalaan tidak dapat dikekalkan? Nilai ialah fungsi
yang sepadan dengan kunciFleksibiliti yang dipaparkan oleh ungkapan biasa dalam penghalaan sukar untuk digantikan dengan teknologi lain. Anda juga boleh menggunakan peraturan biasa untuk mengoptimumkan prestasi Prinsipnya sangat mudah Gabungkan peraturan biasa dan gunakan strategi tertentu untuk menentukan
yang mana berdasarkan hasil padanan biasa.Sebagai contoh, ada
/pengguna/{pid}/profil
/berita
/produk/{pid}
/produk/{pid}/komen/{cid}
Empat laluan
Gunakan ungkapan biasa
#^(?|/user/(d+)/profile|/news|/product/(d+)()|/product/(d+)/comment/(d+)())$#
untuk memadankanApabila hasil tangkapan masing-masing termasuk 1, 0, 2, dan 3 kumpulan, kita tahu bahawa laluan pertama hingga ke-4 telah dipadankan masing-masing. Melalui beberapa kod untuk menggabungkan peraturan biasa secara automatik dan menetapkan bilangan kumpulan tangkapan => pemetaan penghalaan, berbilang peraturan biasa boleh digabungkan bersama untuk satu perlawanan
Berikut ialah helah untuk digunakan
(?|)
untuk menetapkan semula kumpulan tangkapanRujukan http://nikic.github.io/2014/0...