2012-07-29 213 views
3
http://www.example.com?id=05 

PHP:使用preg_match獲取url變量?

http://www.example.com?id=05&name=johnny 

這是一個字符串。我想從中得到$id的價值。

它的正確模式是什麼?

+0

你有關於什麼將在ID參數的信息?所有數字? – 2012-07-29 05:44:42

+0

可能是任何東西。 – user1091856 2012-07-29 05:45:30

+0

爲什麼在使用'$ params = parse_str(parse_url($ url,PHP_URL_QUERY))'時使用preg_match?您的解決方案是否只需要使用preg_match?那樣你可以檢查'$ params ['id']'來獲得你的價值? – 2012-07-29 05:46:10

回答

7

@ PhpMyCoder的解決方案非常完美。但是,如果你確實需要使用的preg_match(雖然完全沒有必要在這種情況下)

$subject = "http://www.mysite.com?id=05&name=johnny"; 
$pattern = '/id=[0-9A-Za-z]*/'; //$pattern = '/id=[0-9]*/'; if it is only numeric. 
preg_match($pattern, $subject, $matches); 
print_r($matches); 
+0

+1餵養我的自我:P和回答所要求的問題 – 2012-07-29 05:55:47

+0

問題表明'id'不一定是數字。 – 2012-07-29 05:58:31

+0

編輯答案涵蓋字母數字查詢。謝謝。 – 2012-07-29 06:00:57

11

你不需要正則表達式(和你不應該跳直在未來的正則表達式,除非你有一個很好的理由) 。

使用​​與PHP_URL_QUERY,它檢索查詢字符串。然後將其與parse_str()配對。

$querystring = parse_url('http://www.mysite.com?id=05&name=johnny', PHP_URL_QUERY); 
parse_str($querystring, $vars); 

echo $var['id']; 
+0

正是我在想什麼。只是刷新,看到你的答案+1。 – 2012-07-29 05:48:57

+0

其實我沒有理由,只是爲了學習的目的,我想我沒有提到它就犯了一個錯誤。 – user1091856 2012-07-29 05:49:37

+0

@ user1091856有些情況適合,但一般來說你應該首先查找一個內部的(PHP提供的)方式,然後看看它是否可以通過字符串操作來實現(可能使用'explode()'),*然後*嘗試正則表達式。 – 2012-07-29 05:55:02