URL-адрес URL-адреса URL и параметр

Я хочу сопоставить URL-адрес на моей странице 404 и на основании этого хочу перенаправить пользователя в конкретное место.

URL-адрес: http://domain.com/there/12345

 // example: /there/12345 $request = $_SERVER['REQUEST_URI']; if (preg_match('', $request)) { } 

Что REGEX я должен поставить, чтобы получить это? И как только тест будет успешным, как я могу получить этот идентификатор ( 12345 ) сразу после его постоянной?

Регулярное выражение, которое вы хотите использовать:

 $str=$_SERVER['REQUEST_URI']; $regex = '/\/there\/(\d+)/'; $matches=array(); preg_match($regex, $str, $matches); var_dump($matches) 

Это дает

 array 0 => string '/there/12345' (length=12) 1 => string '12345' (length=5) 

Обратите внимание на скобки вокруг \d+ захватить все, что соответствует \d+ (т.е. непрерывная строка цифр 0-9)

Если вы хотите иметь шестнадцатеричный идентификатор (например, 12ABF), вы должны изменить \d+ на [a-zA-Z\d]+

Вы также можете использовать функцию basename .

 $path = "http://domain.com/there/12345"; $filename = basename($path); echo $filename; // Sholud be 12345 

Это должно делать то, что вам нужно:

 $request = $_SERVER['REQUEST_URI']; $match = array(); if (preg_match('@^/there/(\d+)$@', $request, $match)) { $id = $match[1]; // Do your processing here. } 

Или если вы склонны забывать синтаксис \ d и хотите избежать символа @ или / в качестве разделителя:

 $request = '/there/12345'; if (preg_match('#/there/([0-9]+)#', $request, $match)) { $id = $match[1]; echo "ID: $id"; } 

Это будет работать 🙂

 if(preg_match('#^/there/(\d+)$#', $request, $matches)){ echo "the id is {$matches[1]}"; } else { echo "no match!"; } 

См. Здесь работу

объяснение

 # delimiter ^ beginning of string /there/ string literal '/there/' ( begin capture group 1 \d+ one or more [0-9] ) end capture group 1 $ end of string # delimiter