2011-12-04 13 views
2

私の404ページのURLと一致させ、それに基づいてユーザを特定の場所にリダイレクトしたいと思います。PHP URL正規表現とパラメータ

URLは、私はこれを取得するために置くべきことREGEXhttp://domain.com/there/12345

// example: /there/12345 
$request = $_SERVER['REQUEST_URI']; 

if (preg_match('', $request)) { 

} 

のですか?そして、テストが成功すると、の直後にこのID()を取得するにはどうすれば

+0

可能重複クイック正規表現PHPは - 文字列からIDを取得](http://stackoverflow.com/questions/5378843/quick-regex-php-getting-id-from-a-string) – mario

答えて

3

使用する正規表現は次のとおりです。

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

これは\d+周りの括弧は、その\d+試合(0-9のすなわち連続文字列は何をキャプチャ

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

通知します)

16進数のIDその後、あなたは\d+[a-zA-Z\d]+

+0

この解決策の良い点は、[a-zA-Z \ d] +を入れて、コメントサイクルに入ることを保存したことです! – Neutralizer

+0

@UmairAshraf :) –

+0

'[a-fA-F \ d] +'は16進法の検証には良いでしょう –

1

これは動作します:)

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

See it work here

説明これはあなたが必要とする何をすべき

#   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 
1

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

また、を使用することができます機能。

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

それはきちんとしている、私はしようとする必要がありますこの1つ。 – Andy

+0

これは '/ there /'文字列コンポーネントのマッチングを保証するものではありません。それでも、 '12345'を取得することがこの質問の唯一の目標であるなら、' basename'は非常に便利です。 –

+0

@macekはい、そうです。この関数は、パスの末尾の名前を返します。 –

1

を変更する必要がありますそれとも、\ dの構文を忘れがち、と区切り文字として@記号または/を避けたい場合(12ABFのように):[の

$request = '/there/12345'; 

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