2012-02-12 174 views
0

我應該使用什麼正則表達式來從URL字符串中提取下面的參數提取參數:正則表達式:從URL

/?c=135&a=1341 

我基本上是想從這個字符串的a參數的值。

感謝,

+0

這個網址有兩個參數。你想要哪一個? – bmargulies 2012-02-12 16:53:22

+0

正如我的問題所指出的,我正在尋找提取'a'值。我已經解決了它..看到答案形式'彩旗' – 2012-02-12 22:46:03

回答

1

如果你想提取的值,該值由一到多的數字,這正則表達式應該工作:

preg_match("/a=(\\d{1,})/ui", $_SERVER['REQUEST_URI'], $matches) 

然後使用$matches[1]顯示a

+0

我還沒有能夠得到這個工作,但我能夠找到以下解決方案:'preg_match(「/ \?c =(\ w +)\&a =(\ w + )/ i「,$ _SERVER ['REQUEST_URI'],$ matches);'感謝您的幫助... – 2012-02-12 17:18:00

+0

當然,PHP使用上面是:preg_match(」/ a =(\\ d {1,})/ ui「,$ searchText) – 2012-02-12 17:27:42

+0

完美。這工作。是的,在我使用PHP之前,我應該指出這一點。現在一切正常...... t – 2012-02-12 17:31:51

1

我打算回答一個稍微更一般的問題,這是你的建議?您嘗試從URI請求字符串中刪除特定參數的前綴(會丟棄前導?)。在這種情況下使用mod_rewrite引擎,以便您可以在.htaccess文件中實現此功能。

該規則稍微複雜一些,因爲您不一定知道a = XXX的查詢參數在哪裏,因此您需要不同的正則表達式,其中a是第一個參數,而a是後續參數。您可以通過((?=a=)regexp1|regexp2)這樣做,所以在這裏它是:

RewriteEngine on 
RewriteBase \ 
RewriteCond %{QUERY_STRING} ^(?(?=a=)a=[^&]*&?(.*)|(.*)&a=[^&]*(&.*)?) 
RewriteRule ^.*    $0?%1%2%3      [L] 

如果是第一次在1%含有休息,否則%2%3的書擋(3%可能爲空)。

如果您希望在特定腳本中發生這種情況,請將規則正則表達式^.*替換爲更具體的規則。

享受:-)

+0

相同的正則表達式可以在'preg_match()'中工作,但爲什麼不使用'$ _GET'? – TerryE 2012-02-12 17:37:44

+0

我試着遠離.htaccess。我之前嘗試過,但沒有工作......也許我的系統有問題。我會檢查... – 2012-02-12 17:41:52

+0

我注意到你仍然愚蠢我Q爲什麼編輯$ _SERVER ['REQUEST_URI'],而不是僅僅使用'$ _GET' :-) – TerryE 2012-02-12 17:45:08